2011-07-22 62 views
1

我有一個由dll和manifest.json文件組成的npapi插件。這個npapi DLL被檢測爲chrome上的插件,即它被列在about:插件頁面上。但是,當我使用標籤在示例html頁面中調用此插件時,它表示「插件無法加載」。 任何想法爲什麼這個插件無法加載鉻。在Chrome上未加載NPAPI插件

感謝

回答

4

有了您提供它不可能說肯定的信息,但我想這是兩件事情之一:

  1. 你的插件可能有ISN的外部依賴沒有被發現。如果您要鏈接到需要.DLL文件的另一個庫(或者如果您使用/ MD作爲CRT的DLL版本),並且在瀏覽器嘗試加載插件DLL時無法找到DLL,那麼您的插件將默默無法加載

  2. 您的插件DLL可能正在加載,但然後拋出一個異常,錯誤地處理的東西,等等,在瀏覽器決定,它不是一個有效的插件。最有可能的情況並非如此,因爲Chrome通常會將這種情況報告爲崩潰,而不是缺少的插件。不過,您可以通過使用命令行參數--plugin-startup-dialog啓動Chrome,這會在加載插件DLL之前彈出一個包含pid的對話框。然後您可以附加一個調試器並告訴它繼續。

這兩個,第一個是迄今爲止我看到的最常見的問題。您可以通過獲取Dependency Walker(depends.exe)並就地打開DLL查看缺少的內容來排除故障。如果你看到ieshims.dll忽略它 - 它總是認爲缺少,但在瀏覽器運行時找到它。

有關調試插件的更多提示可以在http://npapi.com/x/MYAG找到,當然,如果您還不是我推薦使用FireBreath框架,它可以解決您可能遇到的大多數NPAPI問題。

祝你好運!

+0

感謝回答。我確實對我的dll運行了依賴關係walker,它說錯誤打開文件:'msvcr80.dll,msvcp80.dll,msvcr80d.dll和msvcp80d.dll'。但是,這些文件存在於我的系統中。那麼錯誤是什麼?它是否必須對我如何構建這個DLL做任何事情?我正在使用Visual Studio 2005併爲此發佈構建配置。 –

+1

僅限FYI Chrome會(除非最近發生變化)報告一個插件,如果它在初始化期間崩潰,則報告爲缺失。 – smorgan

+0

您提到的DLL是CRT dll;我建議將它改爲靜態鏈接到CRT而不是動態插件,它可能有助於 – taxilian

1

您必須在插件.rc文件中定義MIME類型。如果不這樣做防止插件才能正常加載:

VALUE 「MIME類型」, 「應用程序/ MyApp的」

+1

擁有'VERSIONINFO'資源需要在Chrome的about:plugins中被列爲Windows上的插件。擁有「MIMEType」條目對於實際調用它至關重要! –