Foa*_*oad 1 activex wsh jscript
根据Microsoft 文档,可以使用ActiveXObject()和WScript.CreateObject()函数创建 COM 对象的实例。好像线条
var objXL = new ActiveXObject("Excel.Application");
Run Code Online (Sandbox Code Playgroud)
和
var objXL = WScript.CreateObject("Excel.Application");
Run Code Online (Sandbox Code Playgroud)
是相同的。这是一个真实的假设吗?如果不是,有什么区别?显示差异的示例将不胜感激。
PS这个被标记为重复的帖子是关于 VBScript 的CreateObject()方法和 JScript 的WScript.CreateObject(). 它回答提到了 JScript 的ActiveXObject()构造函数,没有进一步详细说明。
答案是肯定的,它们是相同的(从某种意义上说,它们执行实例化自动化对象的相同工作)。
基本上与具有全局函数的 VBScript 不同CreateObject(),在基于 ECMAScript 3rd Edition 的 JScript 中没有这样的等效项。因此,微软添加了自己的扩展ActiveXObject,它与CreateObject.
这两种语言都可以托管在 Windows 脚本宿主中,这使它们可以访问WScript.CreateObject()另一种方法,该方法执行完全相同的功能,但仅限于WScript仅通过 Windows 脚本宿主可用的对象上下文中。
关于它们是否相同存在一些争论,我仍然坚持我原来的答案它们是相同的。不过,我承认,我是比较的VBScriptCreateObject()和JScriptnew ActiveXObject()不是Wscript.CreateObject()(这是略有不同)。
让我们清楚一点,所有这些函数和对象都用于实例化自动化对象 (COM) 的相同目的。为了支持这一点,这是每个的官方描述;
WScript -CreateObject()方法
创建一个 COM 对象
JScript -ActiveXObject方法
启用并返回对自动化对象的引用
VBScript -CreateObject()函数
创建并返回对自动化对象的引用
如果它们完全相同,它们的意义何在?我们已经有了特定于语言的自动化实例化方法,那还有什么意义Wscript.CreateObject()呢?
不同之处在于,当使用第二个参数调用时,它允许您指定一个前缀,该前缀将用于区分该 COM 对象的事件处理程序。
这是从这个答案中获取的一个示例,它显示了如何使用第二个参数来设置前缀objIE_,然后将其用于与该 COM 对象关联的任何事件处理程序的前缀,在本例中为InternetExplorer.Application对象。
// JScript
var objIE = WScript.CreateObject("InternetExplorer.Application","objIE_")
objIE.Visible = true
while (objIE.Visible){
WScript.Sleep(500);
}
function objIE_NavigateComplete2(pDisp, URL){
WScript.Echo("You just navigated to", URL)
}
function objIE_OnQuit(){
boolBrowserRunning = false ;
}
Run Code Online (Sandbox Code Playgroud)
它允许打开 Internet Explorer 实例并通过绑定事件导航到捕获的 URL,一旦 Internet Explorer 窗口关闭,脚本将结束。
因此,虽然不完全相同,但它们确实执行了实例化自动化 (COM) 对象的相同功能。