2011-09-27 3 views
123

Ho un framework scritto in VBScript. All'interno di qualche funzione in questo parametro framework della funzione viene verificata l'istruzione Nothing in If e quindi alcune azioni eseguite. Codice che utilizza framework scritto in Javascript. Quindi ho bisogno di passare Niente per funzionare per eseguire alcune azioni. In IE8 e le versioni precedenti lavorato approccio prossimo:Passare niente da Javascript a VBScript in IE9

<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 < uscita sarà: Niente, Null, niente.

In IE9: Niente, Nullo, Nullo.

Come posso passare niente da Javascript a VBScript in IE9?

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

modifica: C'è un esempio di funzione quadro. Non posso cambiarlo perché è ampiamente usato nell'applicazione.

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

Aggiornamento

lavoro abbandonato. Trovato uno migliore.

+10

Small sidenote: VBScript [non ha operatori logici in cortocircuito] (http://msdn.microsoft.com/en-us/library/e8zy95hw%28v=VS.85%29.aspx), quindi istruzione 'IsObject (val) E val Is Nothing' causerà comunque un errore. Dovrai dividerlo in un If annidato. –

+0

@Cheran S: Grazie, ho risolto. – mixel

+0

L'ho chiuso come troppo localizzato per te. In futuro, puoi solo segnalare per farcelo sapere :) –

risposta

0

Utilizzare un valore come zero o anche un numero negativo che consentirebbe semplicemente di utilizzare le valutazioni in falsi, quindi non è necessario preoccuparsi di browser diversi e delle loro stranezze nella valutazione dell'oggetto NULL.

+1

Grazie per la risposta, ma il problema è nel quadro. È stato scritto molto tempo fa e viene ampiamente utilizzato in applicazioni di grandi dimensioni e non posso cambiarlo. Ho aggiunto alla domanda un esempio di una funzione di framework chiamata da javascript. – mixel

17

Sfortunatamente, probabilmente sei bloccato qui - JavaScript non ha un equivalente "Niente". Vedere This Article per ulteriori informazioni.

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

+61

Ciao! Grazie per la risposta, ma ho già trovato una soluzione: ho lasciato questo lavoro e ne ho trovato uno migliore;) – mixel

4

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

(Congrats a Mixel su come ottenere un lavoro migliore!)

Io non hanno accesso a IE in questo momento, quindi non posso provare questo, ma cosa succede se si provato 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 consenta di chiamare funzioni del genere ... e avresti a che fare con più/meno argomenti.

+0

È una buona soluzione. Ma questa domanda è già morta da 3 anni. E vorrei che anche VBScript fosse morto :-) Grazie per lo sforzo e prendere l'upvote. – mixel

+0

Non stavo cercando di risolvere il problema (visto che ho visto che avresti già trovato una soluzione migliore), era solo una domanda interessante e ho pensato di dargli una pugnalata. Grazie per l'upvote! – cwohlman

+0

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