2010-09-17 104 views
13

我開始在瀏覽器擴展上工作,並且由於擴展的本質,我需要使用C++進行開發。我目前正在使用Firefox,但希望我的代碼跨瀏覽器移植。首先是有一個庫或接口(如NPAPI),我可以用它來確保擴展?我需要擔心的是什麼?C++中的跨瀏覽器擴展開發

我不使用XPCOM,而是用C++編寫功能,以便我可以爲每個平臺編譯庫,並可以將它與每個瀏覽器的擴展綁定。對於Firefox,我使用XUL爲我的擴展開發JS封裝器,並且IDL文件爲我生成了C++接口。我可以做更好的事嗎?我只是想確保我不會走錯路。

編輯:另請建議如果有這種類型的問題更好的論壇。

+1

正確的論壇。好問題。 – sje397 2010-09-17 00:45:40

+0

但到目前爲止沒有迴應! – user220201 2010-09-17 02:12:44

回答

4

我的背景:幾年前,我從事跨平臺,跨瀏覽器的NPAPI插件,使用OpenGL進行圖像渲染。從那以後,我已經注意到了這個空間,但這不是我現在所做的。我爲Firefox編寫了非插件擴展,但不是Safari或Chrome。


很大程度上取決於您希望自己的擴展所要執行的操作以及要呈現的用戶界面類型。不同的瀏覽器對擴展可能做什麼和不可以做什麼有不同的看法。

如果您只是想以自定義格式顯示圖像或視頻,NPAPI可能是您最好的選擇。 NPAPI基本上是圍繞本地平臺API的簡潔包裝。因此,跨平臺的NPAPI代碼必須處理單個平臺怪癖以及來自瀏覽器的對NPAPI的不同級別的支持。 Google有一個名爲Pepper的項目來修復一些NPAPI的問題,但Pepper除了Chrome之外還沒有任何瀏覽器的支持。

Google的Native Client項目爲運行本機代碼提供了NPAPI的替代方案,但它對本機代碼施加了限制。例如,pthreads是允許的,但網絡訪問不是。有一個名爲c_salt的NaCL子項目,它似乎是爲了解決您尋求的那種HTML/JS UI +本機代碼集成。不幸的是,它仍處於設計階段,因此對於今天編寫擴展程序並不是很有幫助。

我的理解是,目前,與瀏覽器UI集成並且與本地代碼集成的跨瀏覽器擴展是不可行的。 Safari和Chrome都比Firefox限制了擴展,並且只允許使用JavaScript編寫的擴展。我不知道是否可以在Safari或Chrome中使用擴展程序與使用NPAPI編寫的瀏覽器插件進行交互。我猜這是要麼不可能,要麼令人難以置信的痛苦。

總的來說,如果你仔細地限制哪些瀏覽器和平臺的目標,你會發現生活多了,容易得多。究竟選擇哪種瀏覽器和平臺是隻有你自己才能決定的。

+0

因此,編寫瀏覽器擴展沒有相當於FireBreath框架? – 2011-02-07 13:18:03

+1

說到FireBreath,我剛剛在開發者網站上發現了一篇出色的文章,[Browser Plugins vs Extensions:The Difference](http://colonelpanic.net/2010/08/browser-plugins-vs-extensions-the-difference /)。無可否認,我一直對這兩者之間的區別感到困惑。 (這是一個恥辱,因爲我實際上被要求實現的是擴展!) – 2011-04-01 20:38:03

3

沒有多少人知道它,但是,可以使用Qt編寫跨瀏覽器插件。 :-)

您可以使用QtBrowserPlugin

的QtBrowserPlugin解決方案使得 容易編寫可 在Mozilla Firefox,Safari瀏覽器, 歌劇院,谷歌Chrome,QtWebKit的和支持 「Netscape瀏覽器插件API」任何 其他網絡瀏覽器中使用瀏覽器插件,NPAPI。

QtBrowserPlugin是Qt Solutions包的一部分。