1

ActiveXObjectJScript で変数の型を判別する方法はありますか? VBScript にはそのTypeName機能がありますが、JScript で適切な対応物を見つけることができませんでした。私はtypeofandinstanceof演算子に精通していますが、どちらもオブジェクト固有のデータを返しません。

私がこれについて問い合わせている理由は、仕事のプロジェクトのためです。可能であれば、VBScript の使用を避ける必要があります。以下は、私が逸脱できないプロジェクト要件の一部です。

  • JScript コードは HTA の一部になります。
  • HTA は Internet Explorer 8 によってホストされます。
  • すべてのコンピューターで Windows 7 (32 ビット) を実行します。

私が JScript で得た最も近いものは、真/偽の値です。

var Regex = new ActiveXObject('VBScript.RegExp');
Regex instanceof ActiveXObject; // Returns true

ただし、VBScript では、TypeName関数はオブジェクト インターフェイス名を返します。

Dim Regex
Set Regex = CreateObject("VBScript.RegExp")
TypeName(Regex) ' Returns IRegExp2

以前の結果をテストするために作成した完全な HTA を次に示します。

JSTesting.hta

<!DOCTYPE html>
<HTML>
<HEAD>
<TITLE>JScript Testing</TITLE>
<META http-equiv='X-UA-Compatible' content='IE=8' />
<SCRIPT language='JScript'>
    new function () {
        var width = 350, height = 120;
        var left = (screen.availWidth - width) / 2;
        var top = (screen.availHeight - height) / 2;
        resizeTo(width, height); moveTo(left, top);
    }
    window.onload = function () {
        var regex = new ActiveXObject('VBScript.RegExp');
        jstest.onclick = vbstest.onclick = function () {
            var id = event.srcElement.id;
            var TypeName = (id === 'jstest') ? JSTypeTest : VBSProc;
            output.innerText = TypeName(regex);
        };
    };
    function JSTypeTest(obj) {
        return (obj instanceof ActiveXObject) ?
        'ActiveXObject' : 'UnknownObject';
    }
</SCRIPT>
<SCRIPT language='VBScript'>
    Dim VBSProc
    Set VBSProc = GetRef("VBSTypeTest")
    Function VBSTypeTest(obj)
        VBSTypeTest = TypeName(obj)
    End Function
</SCRIPT>
<STYLE type='text/css'>
    span {
        margin-top: 10px;
        font: 10pt courier new;
    }
</STYLE>
</HEAD>
<BODY>
    <BUTTON id='jstest'>JScript</BUTTON>
    <BUTTON id='vbstest'>VBScript</BUTTON>
    <HR>
    <SPAN>VBScript.RegExp object = </SPAN>
    <SPAN id='output'></SPAN>
</BODY>
</HTML>
4

0 に答える 0