在IE9中将任何东西从Javascript传递到VBScript

我有一个用VBScript编写的框架。在此框架中的某个函数中,将检查该函数的参数在 If 语句中是否为 Nothing,然后执行一些操作。

使用框架的代码是用 JavaScript 编写的。因此,我需要将 Nothing 传递给函数以执行某些操作。在 Internet Explorer 8 及更早版本中,以下方法有效:

<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>

在版本 9 之前的 Internet Explorer 中,输出将为:Nothing、Null、Nothing。

Internet Explorer 9 中:无、空、空。

如何在 Internet Explorer 9 中将 Nothing 从 JavaScript 传递到 VBScript?

有一个框架函数的示例。我无法改变它,因为它在应用中被广泛使用。

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

答案 1

不幸的是,你可能被困在这里 - JavaScript没有“无”的等价物。有关详细信息,请参阅此文章

但是,以下方法可能有效。在 VBScript 代码中,创建一个名为“GetNothing”的函数,该函数返回“Nothing”。在你的JavaScript代码中,使用“var jsNothing = GetNothing()”。它来自本文


答案 2

我现在无法访问Internet Explorer,所以我无法测试这个,但尝试编写如下函数:

<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>

当然,我不知道VBScript是否允许调用这样的函数......你必须处理更多/更少的争论。