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


123

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>

IE <9では、出力はNothing、Null、Nothingになります。

IE9の場合:なし、Null、Null。

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

すみません、醜いのはわかっていますが、閉じ込められています。そして、VBScriptは嫌いです。

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

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

更新

仕事を辞めました。より良いものを見つけました。


10
小さな付記:VBScriptには論理演算子の短絡がないため、ステートメントIsObject(val) And val Is Nothingは依然としてエラーになります。ネストされたIfに分割する必要があります。
Cheran Shunmugavel

あなたにとってローカライズされすぎているので、これを締め出しました。今後は、報告してフラグを立てることもできます:)
Tim Post

VBScriptにはAndまたありますか?私はVB.Netにそれがあることを知っています。それが不十分であるとして、少なくともそれは短絡を可能にするでしょう。
vbullinger 2012

@vbullinger:いいえ、遅延ロジックはありません。blogs.msdn.com/b/ericlippert/archive/2004/07/15/184431.aspx -Eric Lippertの記事。
ミクセル2012

回答:


17

残念ながら、おそらくここで行き詰まっています-JavaScriptには「何も」に相当するものがありません。詳細については、この記事を参照してください。

[編集]ただし、以下は機能するかもしれません。VBScriptで、「Nothing」を返す「GetNothing」という関数を作成します。JavaScriptで「var jsNothing = GetNothing()」を使用します。この記事からのもの


4

この質問は面白くて、面白さのためだけに答えようと思った。

(より良い仕事を得ることについてミクセルにおめでとう!)

現在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スクリプトがそのような関数の呼び出しを許可するかどうかはわかりません...そして、引数の数を増やしたり減らしたりする必要があります。


これは良い回避策です。しかし、この問題はすでに3年間死んでいます。そして、私もVBScriptが死んでほしいと思います:-)努力に感謝し、賛成投票をキャッチしてください。
ミクセル2014年

私は問題を修正しようとはしていませんでした(あなたがすでにより良い解決策を見つけたのを見ていたので)、それは単に興味深い質問であり、私はそれに突き刺したいと思いました。賛成票をありがとう!
cwohlman 2014年

VBScriptは、HPの一部の製品を動かすスクリプトエンジンであり続けているため、死ぬべきではありません。まだ。
TheBlastOne 2016

0

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


1
回答ありがとうございます。問題はフレームワークにあります。それはずっと前に書かれたもので、大規模なアプリケーションで広く使用されており、それだけを変更することはできません。質問にjavascriptから呼び出されるフレームワークの機能の例を追加しました。
ミクセル2009

0

例として、このようなものが機能しますが、ブラウザが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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.