【问题标题】:NPAPI plugin not getting loaded upon installing and browser plugin method call failing安装时未加载 NPAPI 插件且浏览器插件方法调用失败
【发布时间】:2013-08-07 06:36:58
【问题描述】:

我在 Mac 上有 Safari/Firefox 的浏览器插件。当用户启动网页时,它会要求用户下载插件。理想情况下,它应该在下载完成后自动刷新页面并使用插件。

代码能够检测到插件,但是当我在插件中调用方法时,它会抛出异常。 如果我手动刷新页面并调用插件方法,我就可以做到。

InitPlugin()
{
var IsPluginInstalled;
var plugin = navigator.plugins["My Plug-In"]; // success
var engine;
if (plugin)
{
     engine = plugin.getElementById("MyPlugin");
     var version = engine.getAttributeByKey("my_plugin_version"); // crashing here.
    IsPluginInstalled  = true;                             

}
}
RefreshPlugin()
{
       navigator.plugins.refresh();
       if (!InitPlugin())
       {
          setInterval(InitPlugin,3000);
       }

}

安装后页面会自动刷新 如果手动刷新页面,此代码工作正常。

【问题讨论】:

    标签: javascript macos npapi browser-plugin


    【解决方案1】:

    我看不到刷新页面的位置。不过应该可行的是重新实例化插件(例如,将其切换到 display:none 并返回)。

    这也表明您可能过早访问插件 - 插件可能尚未完成实例化。

    navigator.plugins 中找到它并(重新)实例化后,您可以:

    • 定期尝试访问它,直到它正常工作或
    • (更好)在页面加载完成后将插件调用到页面中

    在这两种情况下,您都希望在“合理”时间后超时并得出结论

    • 加载失败或
    • 插件被阻止(插件被设置为点击播放或某些扩展阻止了它)

    ...在 MDN 上有一个best-practices article

    【讨论】:

    • :有没有办法通过Java脚本知道浏览器插件是否加载。如果我知道我可以重新加载页面
    • 您可以通过上述方法判断它是否在特定时间范围内加载,但您无法确定为什么它没有在其中加载(插件无法实例化,是点击播放,...)。
    猜你喜欢
    • 2012-01-29
    • 2018-08-31
    • 2015-08-28
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多