簡體   English   中英

將XPCOM組件公開給網頁中的javascript

[英]Expose an XPCOM component to javascript in a web page

我想編寫一個XPCOM組件,它在網頁中作為javascript對象公開。 像Google Gears這樣的東西就是我所追求的。 也就是說,在安裝Google Gears Firefox擴展程序后,任何想要使用它的網頁都可以使用javascript對象“google.gears”。 我發現了很多關於XPCOM開發的mozilla文檔,但沒有任何關於將組件暴露給網頁中運行的javascript的信息。 這可能與XPCOM一起使用嗎? 我是否需要編寫Firefox插件而不是擴展名?

我正在使用Firefox 4中的新API - nsiDOMGlobalPropertyInitializer完成這項工作 - 它允許您創建一個JS對象,以便懶惰地附加到所有窗口。 這是創建Firefox 4中新Web控制台的方式。

您必須在組件中具有以下QI屬性:

QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMGlobalPropertyInitializer]),

以下是擴展中完整實現的示例:

https://github.com/daviddahl/domcrypt/blob/master/extension/domcrypt/components/domcrypt.js

所以基本上,QI到Ci.nsIDOMGlobalPropertyInitializer,然后確保你的清單有一行如下:

category JavaScript-global-property crypt @droplettr.com/domcrypt;1

請參閱: https//github.com/daviddahl/domcrypt/blob/master/extension/domcrypt/components/domcrypt.manifest

這篇文章很有希望:

一般來說,不受信任的內容(例如網頁)無法對大多數XPCOM組件執行任何操作,包括創建它們。 這個策略當然有例外 - 例如,DOM對象是美化的XPCOM組件,具有明確定義的公共接口。 但是,對於使用組件的網頁,包括調用任何方法或屬性,組件必須明確告訴Mozilla什么是允許的,什么不是。 nsISecurityCheckedComponent接口定義了如何完成。

資料來源http//weblogs.mozillazine.org/weirdal/archives/017211.html

舊的3.x方法是在“JavaScript全局屬性”類別中注冊您的組件。 (這仍然適用於4.x,但您必須使用“JavaScript-global-property”類別,因為不再允許類別名稱包含空格。)您的對象必須實現nsIClassInfo接口,以及任何接口想暴露給內容。 它並不是非常有用,因為您無法知道哪些內容腳本正在訪問您的對象。

您可以使用網絡擴展來執行此操作,我已閱讀並且將不再提供支持

它是可行的,但您必須代理對XPCOM組件的調用。 還要記住,它也可能非常危險。

請參閱我的答案了解如何將chrome對象公開給內容代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM