簡體   English   中英

Firefox [npapi]插件開發 - 調用方法時firefox凍結

[英]Firefox [npapi] plugin development - firefox freeze when calling a method

我正在努力學習如何編寫Firefox插件。 我從Mozilla下載了npruntime示例編譯並運行它。 從插件獲取屬性效果很好但是當我嘗試調用方法時,Firefox已經凍結了。 我想也許這個例子有問題,所以我編寫了自己的基本腳本插件,它有一個屬性和一個返回字符串的方法。 該屬性運行良好,但調用該方法導致Firefox再次凍結。

我錯過了什么嗎? 我嘗試調試插件,一切似乎都很好。 調用所有正確的函數並正確返回值。如果我在Firefox掛起時嘗試​​停止該過程,我會停止在Windows DLL上,而不是在我的代碼中,而不是在Firefox代碼中。

如果有人能指出我正確的方向......

謝謝。

我希望你已經解決了。 如果不是這種情況,我剛剛發現這個例子(我認為這是該死的“npruntime樣本”)是有缺陷的。

在返回字符串時,該示例使用函數strdup來分配使用NP_something方法傳遞的字符串。 事實是NPAPI從那一點開始處理分配的字符串,並且當試圖銷毀它時,它不能因為strdup使用malloc而不是NPN_MemAlloc

解決方案是永遠不要將malloc或new用於我們傳遞給NPAPI函數的對象。 在npruntime示例中,錯誤位於第452行:

STRINGZ_TO_NPVARIANT(strdup("foo return val"), *result);

和第466行:

STRINGZ_TO_NPVARIANT(strdup("default method return val"), *result);

我用這段代碼糾正了它:

char* src = "foo return val";
char* out = (char *)NPN_MemAlloc(strlen(src) + 1);
strcpy(out, src);
STRINGZ_TO_NPVARIANT(out, *result);

它起作用了。 但有人會認為樣本中的這種缺陷應該由mozilla SDK維護者來糾正。

我為每個瀏覽器開發了npruntime。 它在每個瀏覽器中運行良好,但firefox僅在Windows 7中凍結。

我解決了將firefox配置“dom.ipc.plugins.enabled”編輯為false的問題。 我不知道它會起作用,但值得嘗試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM