在插件元素(即typeof
或embed
)上使用ECMAScripts object
时,Safari& FireFox返回"function"
:
typeof(window.document['myPlugin']) // "function"
这不能在插件方面受到影响,因为浏览器不会在此处调用插件。有趣的是,在IE中,同一行评估为"object"
。
根据ECMAScript §11.4.3,这只是实现依赖行为还是我错过了什么?
答案 0 :(得分:1)
当涉及到typeof应该如何使用插件对象时,规范都非常模糊,因为ECMAScript并不是用插件编写的。因此,对于具有activex控件的IE,它将倾向于以“对象”响应,因为这是他们决定如何处理它的; Firefox和我相信Safari都会以“功能”回应,因为这就是他们决定处理它的方式。
这两个答案都有意义;请记住,当您使用document.getElementById(“myPlugin”)访问该插件时,您不仅仅是获取对该插件的引用,而是获取对承载该插件的HTML元素的引用,这恰好代理了对该插件的调用。插件。作为一个HTML元素,它具有您甚至不知道的其他属性和方法。
在这种情况下,似乎对象会更有意义,但是对象一般不会,不能有默认函数,所以我的猜测是firefox决定回应它是一个函数(),因为没有在NPAPI中查询默认函数是否存在的方法,而不是调用InvokeDefault。虽然你也可以在ActiveX IDispatch接口上调用默认方法,但它看起来更像是偶然的副作用,而不是设计功能。
不是一个非常科学的答案,但可能有所帮助。