JScript - ActiveXObjects的VBScript TypeName函数

时间:2013-10-07 20:46:23

标签: javascript vbscript

有没有办法在JScript中确定变量的ActiveXObject类型? VBScript具有TypeName函数,但我无法在JScript中找到合适的对应函数。我熟悉typeofinstanceof运算符,但没有一个返回对象特定数据。

我在询问这个问题的原因是为了一个工作项目。如果可能,我需要避免使用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>

0 个答案:

没有答案