【问题标题】:What is the difference between new ActiveXObject() and WScript.CreateObject()?new ActiveXObject() 和 WScript.CreateObject() 有什么区别?
【发布时间】:2020-10-31 21:39:24
【问题描述】:

根据Microsoft documentation,可以使用ActiveXObject()WScript.CreateObject() 函数创建COM 对象的实例。好像是线条

var objXL = new ActiveXObject("Excel.Application");

var objXL = WScript.CreateObject("Excel.Application");

是相同的。这是一个真实的假设吗?如果不是,有什么区别?非常感谢您展示差异的示例。

P.S. 这个被标记为重复的帖子是关于 VBScript 的 CreateObject() 方法和 JScript 的 WScript.CreateObject() 之间的区别。它回答提到了 JScript 的 ActiveXObject() 构造函数,没有进一步说明。

【问题讨论】:

  • 这是 9 年前的same question
  • 这里是an answer
  • 答案是,没有区别。当您提出一个会吸引大量基于意见的答案的问题时,您会期待什么?
  • 看起来你仍然可以找到official documentation,但这并不容易。
  • 有一个可见的表示是一件大事。大多数程序员都熟悉“控件”的概念,它是在主机视图中划出的具有自己行为的空间,由不必每天与主机程序员交谈的程序员编写。但那个世界并不理想,他们生活在一个岛上,船并没有像应有的那样经常到达。是什么杀死了它。

标签: activex jscript wsh


【解决方案1】:

它们是一样的吗?

简短的回答是,它们是相同的(在某种意义上,它们执行相同的实例化自动化对象的工作)。

与具有全局函数CreateObject() 的VBScript 基本上不同,在基于ECMAScript 3rd Edition 的JScript 中没有这样的等价物。因此,微软添加了自己的扩展 ActiveXObject,它与 CreateObject 完成相同的工作。

这两种语言都可以托管在 Windows 脚本宿主中,这使它们能够访问 WScript.CreateObject(),这是另一种功能完全相同的方法,但只能在 WScript 对象的上下文中使用,该对象只能通过 Windows 脚本获得主持人。

跟进

关于它们是否相同存在一些争论,我仍然坚持我原来的答案,它们是相同的。但是,我承认我是在比较 VBScript CreateObject() 和 JScript new ActiveXObject() 而不是 Wscript.CreateObject()(这略有不同)。

让我们明确一点,所有这些函数和对象都具有相同的目的,即实例化自动化对象 (COM)。为了支持这一点,这里是每个的官方描述;

WScript - CreateObject() Method

创建一个 COM 对象

JScript - ActiveXObject Method

启用并返回对自动化对象的引用

VBScript - CreateObject() Function

创建并返回对自动化对象的引用

如果它们完全一样,它们的意义何在?我们已经有了特定于语言的自动化实例化方法,那么Wscript.CreateObject() 的意义何在?

不同之处在于,当使用第二个参数调用时,它允许您指定一个前缀,用于区分该 COM 对象的事件处理程序。

这是一个example taken from this answer,它显示了如何使用第二个参数设置前缀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 ;
}

它允许打开 Internet Explorer 实例并通过绑定事件导航到捕获的 URL,一旦 Internet Explorer 窗口关闭,脚本将结束。

因此,虽然它们不完全相同,但它们执行的功能相同,即实例化自动化 (COM) 对象。


有用的链接

【讨论】:

  • 不,因为mshta.exe 是它自己的主机。 cscript.exewscript.exe 都允许使用 WScript 对象。但是像WScript.Shell 这样的其他WScript 对象可能是因为它们是通过CreateObject()new ActiveXObject() 实例化的。
  • 它实际上更像是一个对象实例而不是一个函数,因为它使用了 `new` 关键字。请注意 official documentation 如何将其称为“对象”而不是“函数”。
  • an example here 如果有帮助的话。
  • new 的使用意味着它是一个类的实例,所以对象在 imo 中似乎是正确的。无论哪种方式都无所谓,认为问题已得到解答。
  • @Foad 我不确定在 HTA 中不可用有什么关系? WScript 对象只能通过 Windows 脚本主机获得,我的意思是它们全部执行相同的功能,我已尝试编辑我的答案以清除它。
猜你喜欢
  • 1970-01-01
  • 2010-10-21
  • 2018-08-02
  • 2011-11-22
  • 1970-01-01
  • 2017-10-31
  • 2018-06-04
  • 2012-12-29
  • 2015-08-24
相关资源
最近更新 更多