NPAPI插件在安装和浏览器插件方法调用失败时未加载

时间:2013-08-07 06:36:58

标签: javascript macos npapi browser-plugin

我在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);
       }

}

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

1 个答案:

答案 0 :(得分:0)

我没有看到它刷新页面的位置。应该工作的是重新实例化插件(例如,将其切换到display:none并返回)。

这看起来好像你可能过早访问插件 - 插件可能还没有完成实例化。

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

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

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

  • 无法加载或
  • 插件被阻止(插件设置为点击播放或某些扩展程序阻止它)

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