web-dev-qa-db-fra.com

Ne rien passer de Javascript à VBScript dans IE9

J'ai un cadre écrit en VBScript. À l'intérieur d'une fonction de ce paramètre d'infrastructure, la fonction est vérifiée pour l'instruction Nothing in If, puis certaines actions sont exécutées. Code utilisant un framework écrit en Javascript. J'ai donc besoin de passer Nothing pour fonctionner pour effectuer certaines actions. Dans IE8 et les versions antérieures fonctionnaient approche suivante:

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

Dans IE <9 la sortie sera: rien, nul, rien.

Dans IE9: Rien, Null, Null.

Comment puis-je passer rien de Javascript à VBScript dans IE9?

Désolé, je sais que c'est moche, mais je suis pris au piège. Et déteste VBScript.

edit: Il y a un exemple de fonction de framework. Je ne peux pas le changer car il est largement utilisé en application.

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

Mise à jour

Travail abandonné. J'en ai trouvé un meilleur.

123
mixel

Malheureusement, vous êtes probablement coincé ici - JavaScript n'a pas d'équivalent "Rien". Voir Cet article pour plus d'informations.

[Modifier] Cependant, les éléments suivants peuvent fonctionner. Dans votre VBScript, créez une fonction appelée "GetNothing" qui renvoie "Nothing". Dans votre JavaScript, utilisez "var jsNothing = GetNothing ()". Provient de cet article

17
Pandelon

Cette question est fascinante, j'ai pensé que j'essaierais d'y répondre juste pour le plaisir.

(Félicitations à Mixel pour avoir un meilleur emploi!)

Je n'ai pas accès à IE pour le moment, donc je ne peux pas tester cela, mais que faire si vous essayez d'écrire une fonction comme celle-ci:

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

Bien sûr, je ne sais pas si VB permet d'appeler des fonctions comme ça ... et il faudrait gérer plus/moins d'arguments.

4
cwohlman

Par exemple, quelque chose comme ça fonctionnera mais si le navigateur est IE11 ou plus tard, vous aurez besoin de la balise '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>
0
svstackoverflow

Utilisez une valeur telle que zéro ou même un nombre négatif qui vous permettrait d'utiliser simplement des évaluations fausses, alors vous n'avez pas à vous soucier des différents navigateurs et de leurs bizarreries lors de l'évaluation de l'objet NULL.

0
Timothy Allyn Drake