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