Не передайте нічого з Javascript в VBScript в IE9


123

У мене є рамка, написана у VBScript. Всередині деякої функції в цьому рамках параметр функції перевіряється на пункт "Нічого в" Якщо, а потім виконуються деякі дії. Код, який використовує рамки, написані на Javascript. Тому мені потрібно пройти Ніщо, щоб функціонувати для виконання деяких дій. У 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 вихід буде: Нічого, Нуль, Нічого.

У IE9: Нічого, Null, Null.

Як я можу передати нічого з Javascript до VBScript у IE9?

Вибачте, я знаю, що це некрасиво, але я потрапив у пастку. І ненавиджу 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 і також? Я знаю, що VB.Net це має. Як такий кульг, як мінімум, це дозволить мати коротке замикання.
vbullinger

@vbullinger: Ні, це не лінива логіка. blogs.msdn.com/b/ericlippert/archive/2004/07/15/184431.aspx - стаття Еріка Ліпперта
міксель

Відповіді:


17

На жаль, ви напевно тут застрягли - у JavaScript немає еквівалента "Нічого". Дивіться цю статтю для отримання додаткової інформації.

[Редагувати] Однак наступне може працювати. У своєму VBScript створіть функцію під назвою "GetNothing", яка повертає "Нічого". У вашому JavaScript використовуйте "var jsNothing = GetNothing ()". Походить із цієї статті


4

Це питання є захоплюючим, я думав, що спробую відповісти на нього просто заради задоволення.

(Поздравляю, щоб міксель став кращою роботою!)

Зараз у мене немає доступу до 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 теж був мертвим :-) Дякую за докладені зусилля та підняли нагороду.
міксель

Я не намагався виправити проблему (оскільки я бачив, що ти вже знайшов краще рішення), це було цікавим питанням, і я подумав, що дам їй забити. Дякую за підсумки!
cwohlman

VBScript продовжує залишатися двигуном сценаріїв, який працює над деякими продуктами HP, тому він дійсно не повинен вмирати. І все-таки.
TheBlastOne

0

Використовуйте таке значення, як нульове або навіть від’ємне число, яке б дозволило вам просто використовувати хибні оцінки, тоді вам не доведеться турбуватися про різні браузери та їх примхи при оцінці NULLоб’єкта.


1
Дякую за відповідь, але проблема в рамках. Він був написаний давно і широко використовується у великому застосуванні, і я не можу його змінити просто. Я додав до питання приклад функції фреймворку, який викликав javascript.
міксель

0

Наприклад, щось подібне буде працювати, але якщо браузер 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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.