Non passare nulla da Javascript a VBScript in IE9


123

Ho un framework scritto in VBScript. All'interno di alcune funzioni in questo framework viene controllato il parametro della funzione per l'istruzione Nothing in If e quindi vengono eseguite alcune azioni. Codice che utilizza framework scritto in Javascript. Quindi devo passare Nothing per funzionare per eseguire alcune azioni. In IE8 e nelle versioni precedenti ha funzionato il prossimo approccio:

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

In IE <9 l'output sarà: Nothing, Null, Nothing.

In IE9: Nothing, Null, Null.

Come posso passare niente da Javascript a VBScript in IE9?

Scusa, so che è brutto, ma sono intrappolato. E odio VBScript.

modifica: c'è un esempio di funzione framework. Non posso cambiarlo perché è ampiamente utilizzato nell'applicazione.

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

Aggiornare

Hai lasciato il lavoro. Ne ho trovato uno migliore.


10
Piccola nota a margine: VBScript non ha operatori logici in cortocircuito , quindi l'istruzione IsObject(val) And val Is Nothingrisulterà comunque in un errore. Dovrai dividerlo in un If annidato.
Cheran Shunmugavel,

L'ho chiuso perché troppo localizzato per te. In futuro, puoi semplicemente contrassegnare per farcelo sapere :)
Tim Post

VBScript ha E anche? So che VB.Net ce l'ha. Per quanto debole sia, almeno consentirà il cortocircuito.
vbullinger

@vbullinger: No, non ha una logica pigra. blogs.msdn.com/b/ericlippert/archive/2004/07/15/184431.aspx -Articolo di Eric Lippert.
mixel

Risposte:


17

Sfortunatamente, probabilmente sei bloccato qui: JavaScript non ha un equivalente "Niente". Vedere questo articolo per ulteriori informazioni.

[Modifica] Tuttavia, potrebbe funzionare quanto segue. Nel tuo VBScript crea una funzione chiamata "GetNothing" che restituisce "Nothing". Nel tuo JavaScript usa "var jsNothing = GetNothing ()". Viene da questo articolo


4

Questa domanda è affascinante, ho pensato di provare a rispondere solo per il gusto di farlo.

(Congratulazioni a mixel per aver trovato un lavoro migliore!)

Non ho accesso a IE in questo momento, quindi non posso testarlo, ma cosa succederebbe se provassi a scrivere una funzione come questa:

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

Ovviamente non so se lo script VB consente di chiamare funzioni del genere ... e dovresti avere a che fare con più / meno argomenti.


È una bella soluzione alternativa. Ma questa domanda è già morta da 3 anni. E vorrei che anche VBScript fosse morto :-) Grazie per lo sforzo e per ricevere il voto positivo.
mixel

Non stavo cercando di risolvere il problema (dato che ho visto che avevi già trovato una soluzione migliore), era solo una domanda interessante e ho pensato di provarci. Grazie per il voto positivo!
cwohlman

VBScript continua ad essere il motore di scripting che alimenta alcuni dei prodotti HP, quindi in effetti non dovrebbe morire. Ancora.
TheBlastOne

0

Usa un valore come zero o anche un numero negativo che ti consenta di usare semplicemente valutazioni false, quindi non devi preoccuparti dei diversi browser e delle loro stranezze nel valutare l' NULLoggetto.


1
Grazie per la risposta ma il problema è nel framework. È stato scritto molto tempo fa ed è ampiamente utilizzato in applicazioni di grandi dimensioni e non posso cambiarlo. Ho aggiunto alla domanda l'esempio di una funzione di framework che chiamava da javascript.
mixel

0

Ad esempio, qualcosa del genere funzionerà, ma se il browser è IE11 o successivo, avrai bisogno del 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.