Не пропускайте ничего из 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>