0

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

}

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

4

1 回答 1

0

我看不到刷新页面的位置。但是应该工作的是重新实例化插件(例如通过切换它display:none来回)。

这看起来您可能过早访问插件 - 插件可能尚未完成实例化。

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

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

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

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

... MDN 上有一篇关于此的最佳实践文章。

于 2013-08-07T12:32:06.077 回答