2009-12-26 60 views
5

我用舊的Mozilla NPRuntime示例作爲基礎編寫了一個小型的NPAPI插件。我的問題是它可以在Firefox和Safari(在Windows上)上正常工作,但無法與Google Chrome一起使用。NPAPI插件在Google Chrome中不起作用

我可以在about:plugins中看到插件,並且我看到Chrome啓動了一個運行插件的新過程,當我打開我的測試頁時,插件進程在大約10秒內死亡,沒有任何錯誤對話框。在10秒內進程處於活動狀態,訪問可編寫腳本的插件對象不起作用(使用Firefox或Safari時可以正常工作)。

任何想法可能導致Chrome在10秒後終止插件進程?必須是與初始化相關的東西,因爲即使我不以任何方式訪問插件,它也會被殺死。

回答

15

確實很難說,但您可以使用--plugin-startup-dialog命令行參數讓Chrome在同一進程中加載​​插件時彈出警告。然後,您可以將調試器附加到該進程,並希望捕獲該錯誤。

您可以查看FireBreath進行比較,看看您是否可以發現初始化代碼中的任何主要差異,因爲FireBreath在Chrome中正常工作。儘管如此,我還是建議附加一個調試器,然後逐步完成代碼,直到它崩潰。在每個入口點,NPP_New,NPP_Destroy和NPP_SetWindow上設置斷點,並查看會發生什麼。

另一個選擇是嘗試從源代碼構建Chromium(不是很困難,但很耗時),然後你可以得到一個完整的堆棧跟蹤到停止工作的地方。

祝你好運!

+2

此外,如果它沒有輸入插件代碼,並且您在windows上,使用* depend.exe *分析chrome可以提供有價值的提示。 – 2009-12-26 09:55:04

+1

使用-plugin-startup-dialog允許我調試初始化序列並找到問題。謝謝! – eburger 2009-12-26 13:09:40

+0

你能告訴我們更多問題是什麼,如果它是鉻特定的? – Gui13 2012-07-10 07:12:22

5

感謝Taxilian的提示,我能夠調試初始化序列,並發現當Chrome調用插件的NP_Initialize()時,示例插件返回錯誤。示例插件進行了檢查,以確保在插件編譯中使用的NPNetscapeFuncs結構定義的大小至少與瀏覽器提供的大小相同。看起來,Chrome使用的結構版本19自然小於最新的Mozilla XUL Runner SDK的版本22,我從中獲得了npapi.h和npruntime.h。

相關問題