Não passar nada de Javascript para VBScript no IE9

123

Eu tenho uma estrutura escrita em VBScript. Dentro de alguma função neste parâmetro de estrutura da função é verificada a instrução Nothing in If e algumas ações executadas. Código que usa estrutura escrita em Javascript. Então, eu preciso passar o Nothing para funcionar para executar algumas ações. No IE8 e versões anteriores funcionou a próxima abordagem:

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

No IE <9, a saída será: Nothing, Null, Nothing.

No IE9: Nada, Nulo, Nulo.

Como posso passar nada do Javascript para o VBScript no IE9?

Desculpe, eu sei que é feio, mas estou preso. E odeio VBScript.

edit: Há um exemplo de função de estrutura. Não posso alterá-lo porque é amplamente utilizado em aplicativos.

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

Atualizar

Trabalho encerrado. Encontrei um melhor.

mixel
fonte
10
Nota lateral pequena: o VBScript não possui operadores lógicos em curto-circuito , portanto a instrução IsObject(val) And val Is Nothingainda resultará em um erro. Você precisará dividi-lo em um If aninhado.
Cheran Shunmugavel 28/09
Fechei isso como localizado demais para você. No futuro, você pode sinalizar para nos informar :)
Tim Post
O VBScript tem E Também? Eu sei que o VB.Net possui. Tão coxo quanto isso é, pelo menos, permitirá um curto-circuito.
21412 vbullinger
@ vbullinger: Não, não tem lógica preguiçosa. blogs.msdn.com/b/ericlippert/archive/2004/07/15/184431.aspx -Artigo de Eric Lippert.
mixel

Respostas:

17

Infelizmente, você provavelmente está preso aqui - o JavaScript não tem o equivalente a "Nada". Consulte este artigo para obter mais informações.

[Editar] No entanto, o seguinte pode funcionar. No seu VBScript, crie uma função chamada "GetNothing" que retorne "Nothing". No seu JavaScript, use "var jsNothing = GetNothing ()". Vem deste artigo

Pandelon
fonte
4

Esta pergunta é fascinante, pensei em tentar responder apenas por diversão.

(Parabéns por mixel em conseguir um emprego melhor!)

Eu não tenho acesso ao IE agora, então não posso testar isso, mas e se você tentasse escrever uma função como esta:

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

Claro que não sei se o script VB permite chamar funções como essa ... e você teria que lidar com mais / menos argumentos.

cwohlman
fonte
É uma boa solução alternativa. Mas esta questão já está morta há 3 anos. E eu desejo que o VBScript também esteja morto :-) Obrigado pelo esforço e pegue o voto positivo.
mixel
Não estava tentando resolver o problema (já que vi que você já havia encontrado uma solução melhor), era apenas uma pergunta interessante e pensei em dar uma facada. Obrigado pelo voto positivo!
Cwohlman
O VBScript continua sendo o mecanismo de script que alimenta alguns dos produtos da HP; portanto, ele não deve morrer. Ainda.
TheBlastOne 17/07/2016
0

Use um valor como zero ou até um número negativo que permita que você use avaliações falsas, para que não precise se preocupar com diferentes navegadores e suas peculiaridades na avaliação do NULLobjeto.

Timothy Allyn Drake
fonte
1
Obrigado por uma resposta, mas o problema está no quadro. Foi escrito há muito tempo e é amplamente utilizado em grandes aplicativos e não posso alterá-lo apenas. Eu adicionei ao exemplo de questão de uma função do framework que chamou de javascript.
mixel
0

Como exemplo, algo como isso funcionará, mas se o navegador for o IE11 ou posterior, você precisará da tag '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>
svstackoverflow
fonte