【问题标题】:NPAPI Plugin not loaded on chromeNPAPI 插件未在 chrome 上加载
【发布时间】:2011-07-22 04:50:23
【问题描述】:

我有一个由 dll 和 manifest.json 文件组成的 npapi 插件。这个 npapi dll 被检测为 chrome 上的插件,即它列在 about:plugins 页面上。但是,当我使用标记在示例 html 页面中调用此插件时,它显示“插件无法加载”。 为什么这个插件无法在 chrome 中加载的任何想法。

谢谢

【问题讨论】:

    标签: google-chrome-extension npapi browser-plugin


    【解决方案1】:

    根据您提供的信息,无法肯定地说,但我猜这是两件事之一:

    1. 您的插件可能具有未找到的外部依赖项。如果您要链接到另一个需要 .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 问题。

    祝你好运!

    【讨论】:

    • 感谢您的回复。我确实对我的 dll 运行了dependency walker,它说打开文件时出错:'msvcr80.dll、msvcp80.dll、msvcr80d.dll 和 msvcp80d.dll'。但是,这些文件存在于我的系统上。那么错误是什么?它与我如何构建这个 dll 有什么关系吗?我正在使用 Visual Studio 2005 并为此发布构建配置。
    • 仅供参考,如果插件在初始化期间崩溃,Chrome 会(除非最近更改)报告插件丢失。
    • 您提到的 DLL 是 CRT dll;我建议将其更改为静态链接 CRT 而不是动态链接插件,这可能会有所帮助
    • --plugin-startup-dialog 是调试插件开发的绝佳助手。
    • 您好,我遇到了同样的问题。如何静态链接到 CRT
    【解决方案2】:

    您必须在插件 .rc 文件中定义 MIME 类型。不这样做会阻止插件正确加载:

    VALUE "MIMEType", "application/myapp"

    【讨论】:

    • 拥有VERSIONINFO 资源需要在Chrome 的about:plugins 中列为Windows 上的插件。拥有MIMEType 条目对于能够实际调用它至关重要!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    相关资源
    最近更新 更多