ActiveXObject
JScript で変数の型を判別する方法はありますか? VBScript にはそのTypeName
機能がありますが、JScript で適切な対応物を見つけることができませんでした。私はtypeof
andinstanceof
演算子に精通していますが、どちらもオブジェクト固有のデータを返しません。
私がこれについて問い合わせている理由は、仕事のプロジェクトのためです。可能であれば、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>