Ничего не передавайте из Javascript в VBScript в IE9 - PullRequest
123 голосов
/ 27 сентября 2011

У меня есть фреймворк, написанный на VBScript.Внутри некоторой функции в этой структуре параметр проверяется на наличие значения Nothing в операторе 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. </p>

В IE9: Nothing, Null, Null.

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

Извините, я знаю, что это ужасно, но я в ловушке.И ненавижу VBScript.

edit: Есть пример функции фреймворка.Я не могу изменить его, потому что он широко используется в приложении.

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

Обновление

Завершено задание.Нашел лучший.

Ответы [ 4 ]

17 голосов
/ 16 февраля 2012

К сожалению, вы, вероятно, застряли здесь - у JavaScript нет эквивалента «Nothing».См. Эта статья для получения дополнительной информации.

[Редактировать] Однако может сработать следующее.В вашем VBScript создайте функцию с именем «GetNothing», которая возвращает «Nothing».В вашем JavaScript используйте "var jsNothing = GetNothing ()".Происходит от этой статьи

4 голосов
/ 24 октября 2014

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

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

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

0 голосов
/ 01 апреля 2019

Например, что-то вроде этого будет работать, но если браузер 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>
0 голосов
/ 28 сентября 2011

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

...