2013-10-21 50 views
-1

我正在使用Firefox中的瀏覽器擴展來攔截HTTP請求並對其進行修改。由於我的項目的目的,我需要整合一個以C++編寫的項目來處理這些信息。重寫C++項目需要太多的工作(這是一個大項目)。我讀過我可以將C++代碼編譯成.dll文件並使用它,但我不確定如何做到這一點(編程擴展的新特性,做過很多web開發)。在瀏覽器擴展中編譯C++代碼

我一直在做很多研究,NPAPI似乎是要走的路(我知道它正在逐步淘汰,但該項目只是我需要工作的一個概念證明)。但是,我不確定像FireBreath這樣的框架是否可以做擴展。它還需要在Firefox中,因爲我的公司不使用其他任何東西。

有沒有一種很好的方法來訪問擴展中的C++代碼?如果有的話,我會喜歡一些教程的鏈接。我的確讀過this previous thread,但它沒有給出關於使用什麼的明確結論。另外,如果有更好/更簡單的方法來做到這一點(插件等),我很想知道!

對不起,如果這是在錯誤的論壇。這裏還是新的:S

+0

您考慮過[FastCGI](http://fastcgi.com/),[ICAP](http://en.wikipedia.org/wiki/Internet_Content_Adaptation_Protocol),還是使用C++中的HTTP服務器庫(像[libonion](https://www.coralbits.com/libonion/)等...)?爲什麼你需要在瀏覽器中工作?爲什麼不在HTTP服務器或代理中? –

+0

我對此比較瞭解,不知道這些是什麼......我的C++代碼將HTTP請求數據加密,然後將其發送回瀏覽器,然後將其輸入數據(例如:random文本框)不會知道它正在被加密。這些能做我想要的嗎? – user2903888

+1

我相信在編碼之前你需要學習很多東西。花點時間瞭解更多關於HTTP的信息(並且遵循我給你的所有鏈接) –

回答

1

我同意你的意見,你應該絕對檢查所有其他的可能性之前,用這個。我可能會考慮編寫自己的代理服務器(類似於Charles的工作方式),當它運行時,它會做你想做的任何事情。

FireBreath可以用來創建插件,只能創建插件。 但是,您可以在擴展中使用插件,至少現在(您已經知道計劃逐步淘汰)。因此,如果您可以使用擴展名捕獲數據(並且我不知道擴展名,所以我不確定您是否可以),那麼您可以使用JavaScript擴展將它傳遞到插件實例中,以便進行處理你想要做的。

經驗法則,但:如果它可以以除插件之外的任何其他方式完成,don't use a plugin

1

@taxilian說得對:

如果能在除插件其他任何方式進行,不使用插件。

寫一個實際的Firefox擴展會更合適。現在,建議您使用js-ctypes與二進制blob(DLL,so,dylib)接口。你會做什麼:

  • 用Javascript寫下大部分你的附加組件,因爲這是通常的做法,因爲它是最簡單的方法。有攔截,修改和跟蹤http請求/響應的方法,例如http observers是一個切入點。查看MDN和其他代碼(其他插件),它們操縱HTTP請求以查看不同部分(觀察者,nsIHttpChannel,nsITracableChannel
  • 爲您現有的庫創建一個僅限C的API,將您的C++ API需要訪問你的附加組件通用經驗法則:保持簡單
  • 撰寫js-ctypes綁定到該C-only API,以便您可以在Javascript中使用它並在其他擴展代碼中使用這些綁定。