web-dev-qa-db-ja.com

IE9でJavascriptからVBScriptに何も渡さない

VBScriptで記述されたフレームワークがあります。このフレームワークの一部の関数内では、関数のパラメーターがIfステートメントにNothingがないかチェックされ、次にいくつかのアクションが実行されます。 Javascriptで記述されたフレームワークを使用するコード。したがって、アクションを実行するには、Nothingを機能に渡す必要があります。 IE8およびそれ以前のバージョンでは、次のアプローチが有効でした。

<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出力は:Nothing、Null、Nothing。

IE9の場合:なし、ヌル、ヌル。

IE9でJavascriptからVBScriptにNothingを渡すにはどうすればよいですか?

申し訳ありませんが、私はそれがknowいことを知っていますが、私は閉じ込められています。そして、VBScriptが大嫌いです。

編集:フレームワーク関数の例があります。アプリケーションで広く使用されているため、変更できません。

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

更新

ジョブを終了しました。より良いものを見つけました。

123
mixel

残念ながら、おそらくあなたはここで立ち往生しています-JavaScriptには同等の "Nothing"がありません。詳細については、 この記事 を参照してください。

[編集]ただし、次のように動作する場合があります。 VBScriptで、「Nothing」を返す「GetNothing」という関数を作成します。 JavaScriptで「var jsNothing = GetNothing()」を使用します。 この記事 から

17
Pandelon

この質問は魅力的で、楽しみのためだけに答えてみようと思いました。

(ミクセル、より良い仕事を得ることをおめでとうございます!)

私はIEにアクセスできないので、これをテストすることはできませんが、次のような関数を書いてみたらどうでしょうか:

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

もちろん、VBスクリプトがそのような関数の呼び出しを許可するかどうかはわかりません...

4
cwohlman

例として、このようなものは機能しますが、ブラウザがIE11以降の場合、「メタ」タグが必要になります。

<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

ゼロまたは負の数などの値を使用して、偽の評価を使用できるようにします。そうすれば、NULLオブジェクトを評価する際に、さまざまなブラウザーとその癖を心配する必要がなくなります。

0