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.