在IE9中将任何内容从Javascript传递到VBScript


123

我有一个用VBScript编写的框架。在此框架的某个函数内部检查函数的If语句中是否为Nothing,然后执行某些操作。使用Java编写的框架的代码。因此,我需要通过Nothing来执行某些操作。在IE8和更早版本中,采用了以下方法:

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

在IE <9中,输出将为:Nothing,Null和Nothing。

在IE9中:无,无,无。

如何在IE9中将Javathing Nothing传递给VBScript?

抱歉,我知道它很丑,但是我被困了。并讨厌VBScript。

编辑: 有一个框架功能的例子。我无法更改它,因为它已在应用程序中广泛使用。

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

更新资料

辞职了 找到了更好的一个。


10
小旁注:VBScript 没有短路的逻辑运算符,因此该语句IsObject(val) And val Is Nothing仍将导致错误。您必须将其拆分为嵌套的If。
Cheran Shunmugavel

我对您来说太过本地化了。将来,您可以标记以告知我们:)
Tim Post

VBScript是否具有And Also?我知道VB.Net拥有它。尽管很la脚,但至少会造成短路。
vbullinger

@vbullinger:不,它没有惰性逻辑。blogs.msdn.com/b/ericlippert/archive/2004/07/15/184431.aspx-Eric Lippert的文章。
mixel 2012年

Answers:


17

不幸的是,您可能被困在这里-JavaScript没有“ Nothing”等效项。看到这篇文章更多信息,。

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


4

这个问题很有趣,我想我会尝试回答它只是为了好玩。

(祝贺mixel获得更好的工作!)

我目前无法访问IE,因此无法对此进行测试,但是如果您尝试编写如下函数,该怎么办:

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

当然,我不知道VB脚本是否允许调用这样的函数……而您将不得不处理更多/更少的参数。


这是一个不错的解决方法。但是这个问题已经3年了。我也希望VBScript也能死:-)谢谢大家的努力,赶上了赞誉。
mixel 2014年

我并没有试图解决该问题(因为我看到您已经找到了一个更好的解决方案),这只是一个有趣的问题,我想我应该给它一个机会。感谢您的支持!
cwohlman 2014年

VBScript仍然是为某些HP产品提供支持的脚本引擎,因此,它的确不应死。然而。
TheBlastOne

0

使用零或什至负数之类的值,使您可以简单地使用伪造的评估,那么您不必担心不同的浏览器及其怪异的评估NULL对象。


1
感谢您的回答,但问题出在框架中。它是很久以前写的,并且在大型应用程序中被广泛使用,我无法改变它。我添加了从javascript调用的框架功能的问题示例。
mixel 2011年

0

例如,类似的方法将起作用,但是如果浏览器是IE11或更高版本,则将需要'meta'标签。

<HTML>
<HEAD>
<meta http-equiv="x-ua-compatible" content="IE=10">
<TITLE>Pass Javscript 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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.