Firefox提供XPCOM API接口,用於編寫C++中的附加類,並允許第三方Web應用程序訪問它們。我想知道 - 是否有其他方式來實現這些好處(例如,在C++中編寫附加程序並提供JavaScript接口,以便任何JavaScript應用程序都可以使用此接口並最終使用C++類功能)?C++中的Firefox附件
3
A
回答
1
是的,可以用C++(或Javascript)編寫XPCOM組件並將它們公開給網站。您可以在JavaScript-global-property
,JavaScript-global-constructor
等類別或類別中註冊它們。 這些東西一般沒有很好的記錄,如果有的話。如果您想了解更多信息,請閱讀代碼(例如mxr)。
但這樣做是非常不鼓勵的原因有很多:
- 這是很難保證這樣的事情實際上是安全的,並使其工作可靠。
- 很難控制什麼網站可能實際使用新的API。
JavaScript-global-property
和朋友將可用於所有網站! - 您的加載項將引入新名稱到全局JavaScript名稱空間中,這可能與網站代碼衝突。 (因此,許多新的WebAPI不是直接引入到全局命名空間中,而是作爲導航器的屬性)。
- 由於這些原因,addons.mozilla.org網站將只接受使用此機制的插件作爲規則的例外情況,並且僅在作者證明使用是必需的且沒有實際替代方法時。
MDN有一些關於網頁到擴展通信的文章,反之亦然,您可以使用它們,例如, "Interaction between privileged and non-privileged pages"。
另外,還鼓勵以擴展內發貨二進制的XPCOM組件:
- 你需要重新編譯你對每個壁虎版本的二進制文件(每六個星期),因爲二進制組件的版本,因爲標籤Firefox 4.
- (點)版本之間的二進制API/ABI不像您希望的那樣穩定。實際上API/ABI經常在遊戲後期被不經意地破壞,導致許多用戶發生大量不必要的崩潰,例如, bug 828296。
- 平臺開發者officially said binary components in extensions are a hassle。
相反,你應該嘗試儘可能使用JavaScript和/或創建一個普通的二進制庫(的.so,.dll文件,名爲.dylib)與C-API/ABI和使用js-ctypes。你可以在JavaScript中實現你的XPCOM組件,然後用js-ctypes調用你的庫。 AFAIK大多數插件現在切換到js-ctypes。
相關問題
- 1. 創建Firefox附加組件
- 2. Youtube Firefox附加組件
- 3. .Net Firefox附加組件?
- 4. c中的多個附件#
- 5. 附加組件Firefox的PHP請求
- 6. Firefox附加組件:插入的HTML
- 7. 在c中加載不帶附件的附件文件名#
- 8. 我們應該如何用C#構建Mozilla Firefox附加組件?
- 9. C#中的文件附件控制#
- 10. 重新定義Mozilla Firefox中的overlay.js中的XMLHTTPRequest附加組件
- 11. 從Firefox附件中的iframe中關閉面板
- 12. 附件中的附件
- 13. 如何驗證Firefox附加組件
- 14. IDE for Firefox附加組件開發
- 15. 附加組件SDK是Mozilla Firefox currentURI
- 16. Firefox聲稱附加組件不兼容
- 17. Firefox SDK附加組件 - 如何開始
- 18. 如何製作Firefox附加組件
- 19. firefox:你如何卸載附加組件?
- 20. Firefox附加組件:域名聲明
- 21. 附加數據文件與Firefox擴展
- 22. 使用Firefox附件訪問https站點
- 23. Firefox附加組件:懸掛TCP連接
- 24. Firefox附加組件sdk vs XUL
- 25. Mozilla Firefox附加組件不會啓動
- 26. 使用附加組件生成器(JetPack)的Firefox附件的選項頁面
- 27. 使用jQuery將Firefox擴展移植到Firefox SDK附加組件
- 28. Firefox擴展和Firefox附加組件有什麼區別?
- 29. 將Firefox開發者控制檯附加到附加組件
- 30. 帶附件的C#MailTo?
非常感謝您的詳盡解答!你可以請建議什麼是這個可能的替代品http://stackoverflow.com/questions/17955147/ideas-needed-javascriptxpcomc-add-on? – peetonn