2011-02-08 56 views
0

我正在開發一個插件,我需要爲給定的 主機獲取瀏覽器代理。如何從NPAPI插件獲取瀏覽器代理,而不使用xpcomglue?

現在它可以使用nsIProtocolProxyService。然而,NewURI 功能(構造一個URI對象所需,使用 nsIProtocolProxyService ::解析())採用常量引用 nsACString。它看起來像,對於它的任何具體實施 我需要鏈接xpcomglue,我不能這樣做(如果我明白它 權利,我不應該動態鏈接技術 的原因;我不能靜態鏈接xpcomglue_s爲合法的 原因)。

那麼,如何才能得到瀏覽器代理沒有鏈接到xpcomglue

回答

2

這絕對是一個棘手的問題。真的,最好的方法是(如果可能)在可能的情況下使用NPN_GetURL/NPN_PostURL風格的NPAPI函數。如果這是不可能的,除非你可以依賴最近的瀏覽器版本,否則你或多或少就會變成小溪。

如果你可以假設Firefox/gecko API的最新版本(我非常確定Firefox 3.6支持這個,但不確定是否啓動;文檔說gecko SDK 1.9,但我不認爲它在那裏點),那麼您可以使用NPN_GetValueForURL和NPNURLVProxy來獲取給定URL的代理信息。

再一次,請記住,這隻適用於較新的瀏覽器,並且我還沒有機會編譯兼容性矩陣以支持它。我有計劃將這個添加到FireBreath,但它並沒有達到1.4,所以它可能還要一個月才能到達它。

作爲故障轉移選項,如果不可用,最常見的解決方案是簡單地獲取WinInet(Internet Explorer)的代理配置,並相信它將相同。

這是(IMO)的一個重大問題,沒有一個很好的解決辦法。這就是Flash在整個代理網絡訪問方面臭名昭着的變化的原因。

0

你不應該開發使用XPCOM的NPAPI插件;見Mozilla's docs。也許你可以使用Firefox擴展至少部分你正在做的事情,並使用JS綁定與你的插件進行通信。

+0

爲什麼?我通過npruntime公開了插件腳本,但我認爲我仍然可以通過XPCOM調用mozilla服務。 – rincewind 2011-02-09 00:17:29

+0

,因爲它不會在除Firefox以外的其他任何程序上運行 - 不在Chrome,Safari,Opera等上。 – taxilian 2011-02-09 01:16:52

相關問題