mixel
mixel

Reputation: 25846

Pass Nothing from Javascript to VBScript in IE9

I have a framework written in VBScript. Inside some function in this framework, a parameter of the function is checked for Nothing in an If statement and then some actions are executed.

Code that uses the framework is written in JavaScript. So I need to pass Nothing to the function to perform some actions. In Internet Explorer 8 and earlier versions, the following approach worked:

<script type="text/vbscript">
    Function Test(val)
        If (IsNull(val)) Then
            Test = "Null"
        ElseIf (IsObject(val)) Then
            If (val Is Nothing) Then
                Test = "Nothing"
            End If
        End If
    End Function

    Dim jsNothing
    Set jsNothing = Nothing
    msgBox(Test(jsNothing))
    msgBox(Test(Null))
</script>


<script type="text/javascript">
    alert(Test(jsNothing));
</script>

In Internet Explorer before version 9, the output will: Nothing, Null, Nothing.

In Internet Explorer 9: Nothing, Null, Null.

How can I pass Nothing from JavaScript to VBScript in Internet Explorer 9?

There is an example of a framework function. I can not change it, because it is widely used in application.

Function ExampleFunction(val)
    If (val Is Nothing) Then
        ExampleFunction = 1
    Else
        ExampleFunction = 0
    End If
End Function

Upvotes: 126

Views: 11590

Answers (4)

svstackoverflow
svstackoverflow

Reputation: 723

As an example, something like this will work, but if the browser is Internet Explorer 11 or later you will need the 'meta' tag.

<html>

    <head>
        <meta http-equiv="x-ua-compatible" content="IE=10">
        <title>Pass JavaScript to VBScript</title>

        <script>
            var val = "null";

            window.alert("Test: " +  val);
        </script>

        <script type="text/vbscript">

            PassNothing(val)

            Sub PassNothing(value)
                If LCase(value) = "null" Then
                    MsgBox "Java passed 'null' so VBScript = 'Nothing'"
                Else
                    Msgbox "Nothing received"
                End If
            End Sub

        </script>

    </head>

</html>

Upvotes: 0

cwohlman
cwohlman

Reputation: 773

I don't have access to Internet Explorer right now, so I can't test this, but try to write a function like this:

<script type="text/vbscript">
  Function CallWithNulls(fn, arg1, arg2, arg3)
    If (isNull(arg1)) arg1 = Nothing
    If (isNull(arg2)) arg2 = Nothing
    If (isNull(arg3)) arg3 = Nothing
    fn(arg1, arg2, arg3)
  End Function
  Function IsNothing(arg1, arg2, arg3)
     return arg1 is Nothing
  End Function
</script>

<script type="text/javascript">
  alert(CallWithNulls(IsNothing, null, 1, 2));
</script>

Of course, I don't know if VBScript allows calling functions like that... and you'd have to deal with more/fewer arguments.

Upvotes: 4

Pandelon
Pandelon

Reputation: 607

Unfortunately, you are probably stuck here - JavaScript does not have a "Nothing" equivalent. See this article for more information.

However, the following may work. In your VBScript code, create a function called "GetNothing" that returns "Nothing". In your JavaScript code, use "var jsNothing = GetNothing()". It comes from this article.

Upvotes: 18

Timothy Allyn Drake
Timothy Allyn Drake

Reputation: 926

Use a value such as zero or even a negative number. That would allow for you to simply use falsy evaluations, and then you don't have to worry about different browsers and their quirks in evaluating the NULL object.

Upvotes: 0

Related Questions