Не пропускайте ничего из Javascript в VBScript в IE9

У меня есть структура, написанная в VBScript. Внутри какой-либо функции в этой структуре параметр функции проверяется для оператора Nothing in If, а затем выполняются некоторые действия. Код, который использует фреймворк, написанный в Javascript. Поэтому мне нужно передать 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: Nothing, Null, Null.

Как я могу передать Nothing из Javascript в VBScript в IE9?

Извините, я знаю это уродливо, но я в ловушке. И ненавижу 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

Этот вопрос увлекательный, я подумал, что попробую ответить на него просто ради удовольствия.

(Поздравляем с миксером, чтобы получить лучшую работу!)

У меня нет доступа к 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 script вызывать подобные функции... и вам придется иметь дело с большим количеством аргументов.

Ответ 3

Используйте значение, такое как нуль или даже отрицательное число, которое позволит вам просто использовать оценки фальшивки, тогда вам не нужно беспокоиться о разных браузерах и их причудах при оценке объекта NULL.

Ответ 4

Например, что-то вроде этого будет работать, но если браузер IE11 или новее, вам понадобится мета-тег.

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