2013-05-31 50 views
1

我已經成功地編譯並創建了MS基於mozilla npruntime項目的npapi dll。參考文獻:https://developer.mozilla.org/en-US/docs/Compiling_The_npruntime_Sample_Plugin_in_Visual_Studio。 啓動mozilla並打開about:插件顯示插件。但是當我打開「test.html」插件不會出現。我有一個單獨的測試應用程序,我可以通過 NP_INIT l_pInit =(NP_INIT)GetProcAddress(hModule,「NP_Initialize」)來訪問入口點函數,以測試dll。 和我能夠進入我的插件DLL函數。NPAPI mozilla插件加載問題

但與mozilla它不起作用。請建議。

+0

如果它不顯示在about:plugins(是否?)您可能會丟失資源文件條目,或者它們可能不正確(例如[使用錯誤的區域設置](http://stackoverflow.com/questions)/13859882/NPAPI-插件 - 不 - 不得到加載功能於火狐))。 –

回答

0

您可以直接調試mozilla進程。只需附加到過程。但是,現代瀏覽器使用單獨的進程來加載第三方插件,因此您必須附加到該進程。比你可以設置斷點加載例程(NP_GetEntryPoints,NP_Initialize),看看那裏發生了什麼。另外,如果您在附加進程時遇到問題,您可以直接在代碼中顯示調試對話框,並縮小問題區域。

更新1:

這似乎是瀏覽器n要知道它應該使用的插件。你是否指定了插件的hwat的MIME類型?如果是這樣,在HTML頁面中運行以下腳本:

<embed type="application/x-my-extension" id="pluginId"> 
    <script> 
    var plugin = document.getElementById("pluginId"); 
    var result = plugin.myPluginMethod(); // call a method in your plugin 
    console.log("my plugin returned: " + result); 
    </script> 

x-my-extension與您的擴展,你在NP_GetMimeDescription使用替代。如果瀏覽器爲正確的MIME類型正確註冊了您的插件,您應該檢查about:pluginsenter image description here

+0

Mozilla具有加載插件的plugin-container.exe。但是當我運行mozilla瀏覽器時,我看不到它在進程列表中運行。附加到firefox.exe不會工作,也不會通過VS中的命令和參數選項進行調試。調試消息在使用我的測試應用程序時出現,但不與mozilla一起使用。 – manav

0

聽起來就像在你的插件初始化中很可能出現了錯誤;你可以嘗試使用FireBreath來創建一個npapi插件,因爲它在IE上的工作量也會減少很多。如果你不喜歡這個想法,你可以看看其他的npapi插件(包括FireBreath),以確保你正確地做事情。將日誌記錄(您喜歡的任何類型)添加到主入口點,並查看它在哪個點失敗。

另一個竅門是轉到about:config並找到plugins ipc設置並禁用它們;那麼你可以附加到主要的firefox進程,它應該打到你的斷點,如果他們被調用。

查看FireBreath Debugging Plugins頁面的其他想法。

+0

謝謝,這個調試技巧爲我工作 – manav

0

謝謝guyz。最後,我可以在瀏覽器中加載和訪問我的插件的功能。以下是調查結果: - 1.即使我的插件在資源文件中的MIME類型是'application/mozilla-npruntime-scriptable-plugin'。但我需要通過'application/x-npruntime-scriptable-plugin'從javascript嵌入元素訪問它。在這一步之後,調試器開始打破我的插件的中斷點。 2.檢查NPPluginFuncs和NPNetscapeFuncs的大小失敗,可能是因爲在我的Firefox中實現了不同版本的NPAPI。 最後,我得到了啓動,並感謝大家的支持。