2010-03-18 83 views
0

當使用上插件元件ECMAScripts typeof(即embedobject),Safari瀏覽器&火狐返回"function"typeof運算針對HTML插件元件

typeof(window.document['myPlugin']) // "function" 

這不能在插件側的影響,作爲瀏覽器沒有按不要在這裏調用插件。有趣的是,在IE中,同一行評估爲"object"

這是簡單的執行依賴行爲根據ECMAScript §11.4.3或我在這裏丟失的東西嗎?

+0

你可以作爲一個函數調用它嗎? – SLaks 2010-03-18 16:24:58

+0

'window.document ['myPlugin']()'導致瀏覽器試圖調用默認函數 - 它沒有一個。 – 2010-03-18 16:35:14

回答

1

當涉及到typeof應該如何與插件對象行爲時,規範都非常模糊,因爲ECMAScript沒有考慮插件。因此,對於具有ActiveX控件的IE,它會傾向於用「對象」來響應,因爲這是他們決定如何處理它的原因; Firefox和我相信Safari都會用「功能」做出迴應,因爲這是他們如何決定處理它的。

這兩個答案都有意義;請記住,當您使用document.getElementById(「myPlugin」)訪問插件時,您不僅僅是獲取對該插件的引用,而是獲取對託管該插件的HTML元素的引用,這發生在代理調用該插件。作爲一個HTML元素,它有其他的屬性和方法,你甚至不知道。

看起來好像對象在這種情況下會更有意義,但一個對象通常不會有默認函數,所以我的猜測是firefox決定響應它是一個函數(),因爲存在沒有辦法在NPAPI中查詢是否存在缺省函數,而不是調用InvokeDefault。雖然您也可以在ActiveX IDispatch接口上調用默認方法,但它看起來更像是一種偶然的副作用,而不是設計功能。

不是一個非常科學的答案,但可能有幫助。

+1

獲得'GetValue()'並查看本機和主機對象的定義(http://bclary.com/2004/11/07/#a-4.3.6,爲什麼我以前不這樣做?)它應該是一個主機對象,因此*實現定義*在哪裏你的推理適合。 – 2010-03-18 22:34:38

相關問題