Übergeben Sie in IE9 nichts von Javascript an VBScript

123

Ich habe ein Framework in VBScript geschrieben. Innerhalb einer Funktion in diesem Framework wird der Parameter der Funktion auf Nothing in If-Anweisung überprüft und anschließend werden einige Aktionen ausgeführt. Code, der ein in Javascript geschriebenes Framework verwendet. Ich muss also Nothing übergeben, um einige Aktionen ausführen zu können. In IE8 und früheren Versionen funktionierte der nächste Ansatz:

<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 wird Folgendes ausgegeben: Nichts, Null, Nichts.

In IE9: Nichts, Null, Null.

Wie kann ich in IE9 Nothing von Javascript an VBScript übergeben?

Entschuldigung, ich weiß, dass es hässlich ist, aber ich bin gefangen. Und hasse VBScript.

edit: Es gibt ein Beispiel für eine Framework-Funktion. Ich kann es nicht ändern, weil es in der Anwendung weit verbreitet ist.

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

Aktualisieren

Job gekündigt. Fand einen besseren.

mischen
quelle
10
Kleine Randnotiz: VBScript hat keine kurzgeschlossenen logischen Operatoren , daher führt die Anweisung IsObject(val) And val Is Nothingimmer noch zu einem Fehler. Sie müssen es in ein verschachteltes If aufteilen.
Cheran Shunmugavel
Ich habe dies als zu lokalisiert für Sie abgeschlossen. In der Zukunft können Sie nur markieren, um uns zu informieren :)
Tim Post
Hat VBScript und auch? Ich weiß, dass VB.Net es hat. So lahm das auch ist, es wird zumindest einen Kurzschluss ermöglichen.
Vbullinger
@vbullinger: Nein, es hat keine faule Logik. blogs.msdn.com/b/ericlippert/archive/2004/07/15/184431.aspx -Eric Lipperts Artikel.
Mixel

Antworten:

17

Leider stecken Sie wahrscheinlich hier fest - JavaScript hat kein "Nichts" -Äquivalent. Weitere Informationen finden Sie in diesem Artikel .

[Bearbeiten] Folgendes kann jedoch funktionieren. Erstellen Sie in Ihrem VBScript eine Funktion namens "GetNothing", die "Nothing" zurückgibt. Verwenden Sie in Ihrem JavaScript "var jsNothing = GetNothing ()". Kommt aus diesem Artikel

Pandelon
quelle
4

Diese Frage ist faszinierend, ich dachte, ich würde versuchen, sie nur zum Spaß zu beantworten.

(Herzlichen Glückwunsch zu einem besseren Job!)

Ich habe momentan keinen Zugriff auf den IE, daher kann ich dies nicht testen, aber was ist, wenn Sie versucht haben, eine Funktion wie diese zu schreiben:

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

Natürlich weiß ich nicht, ob das VB-Skript das Aufrufen solcher Funktionen erlaubt ... und Sie müssten sich mit mehr / weniger Argumenten befassen.

cwohlman
quelle
Es ist eine schöne Problemumgehung. Aber diese Frage ist schon 3 Jahre tot. Und ich wünsche mir, dass VBScript auch tot ist :-) Vielen Dank für die Mühe und die positive Bewertung.
Mixel
Ich habe nicht versucht, das Problem zu beheben (da ich gesehen habe, dass Sie bereits eine bessere Lösung gefunden haben), es war nur eine interessante Frage und ich dachte, ich würde es versuchen. Danke für die positive Bewertung!
cwohlman
VBScript ist weiterhin die Scripting-Engine, die einige HP Produkte antreibt, daher sollte es in der Tat nicht sterben. Noch.
TheBlastOne
0

Verwenden Sie einen Wert wie Null oder sogar eine negative Zahl, mit der Sie einfach falsche Auswertungen verwenden können. Dann müssen Sie sich bei der Auswertung des NULLObjekts keine Gedanken über verschiedene Browser und deren Macken machen .

Timothy Allyn Drake
quelle
1
Vielen Dank für eine Antwort, aber das Problem liegt im Rahmen. Es wurde vor langer Zeit geschrieben und ist in großen Anwendungen weit verbreitet und ich kann es nicht einfach ändern. Ich habe dem Fragebeispiel einer Framework-Funktion hinzugefügt, die aus Javascript aufgerufen wurde.
Mixel
0

Als Beispiel funktioniert so etwas, aber wenn der Browser IE11 oder höher ist, benötigen Sie das 'Meta'-Tag.

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