Javascript html插件元素的类型

Javascript html插件元素的类型,javascript,html,dom,plugins,Javascript,Html,Dom,Plugins,在插件元素上使用ECMAScripttypeof时(即embed或object),Safari&FireFox返回“函数”: 这在插件方面不会受到影响,因为浏览器不会在此处调用插件。有趣的是,在IE中,同一行计算为“object” 根据ECMAScript,这仅仅是依赖于实现的行为,还是我在这里遗漏了什么?当谈到typeof应该如何处理插件对象时,规范都非常模糊,因为ECMAScript并没有考虑插件。因此,在带有activex控件的IE上,它会倾向于用“对象”来响应,因为这就是他们决定处理它的

在插件元素上使用ECMAScript
typeof
时(即
embed
object
),Safari&FireFox返回
“函数”

这在插件方面不会受到影响,因为浏览器不会在此处调用插件。有趣的是,在IE中,同一行计算为
“object”


根据ECMAScript,这仅仅是依赖于实现的行为,还是我在这里遗漏了什么?

当谈到typeof应该如何处理插件对象时,规范都非常模糊,因为ECMAScript并没有考虑插件。因此,在带有activex控件的IE上,它会倾向于用“对象”来响应,因为这就是他们决定处理它的方式;Firefox和我相信Safari都以“功能”作为回应,因为这是他们决定处理它的方式

两个答案都有意义;请记住,当您使用document.getElementById(“myPlugin”)访问插件时,您不仅获得了对插件的引用,还获得了对托管插件的HTML元素的引用,这恰好是对插件的代理调用。作为一个HTML元素,它还有其他您甚至不知道的属性和方法

在这种情况下,对象似乎更有意义,但对象通常没有,也不能有默认函数,因此我猜测firefox决定响应它是一个函数(),因为在NPAPI中除了调用InvokedFault之外,无法查询默认函数是否存在。虽然您也可以在ActiveX IDispatch界面上调用默认方法,但它实际上更像是一种附带的副作用,而不是一种设计功能


这不是一个非常科学的答案,但可能会有所帮助。

您能将其作为函数调用吗?
窗口。文档['myPlugin']()
会导致浏览器尝试调用默认函数-但它没有。在获取
GetValue()
并查看本机和主机对象的定义后(,为什么我以前没有这样做?)它应该是一个宿主对象,因此实现定义了适合您的推理的地方。
typeof(window.document['myPlugin']) // "function"