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

Javascript 安装时未加载NPAPI插件,浏览器插件方法调用失败,javascript,macos,npapi,browser-plugin,Javascript,Macos,Npapi,Browser Plugin,我在Mac上有Safari/Firefox浏览器插件。当用户启动网页时,它会要求用户下载插件。理想情况下,下载完成后,它会自动刷新页面并使用插件 代码能够检测插件,但当我调用插件中的方法时,它会引发异常。 如果我手动刷新页面并调用插件方法,我就可以做到这一点 InitPlugin() { var IsPluginInstalled; var plugin = navigator.plugins["My Plug-In"]; // success var engine; if (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);
       }

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

我看不出这会在哪里刷新页面。不过,应该重新实例化插件(例如,将其切换到
display:none
并返回)

这看起来也可能是您访问插件的时间太短了-插件可能还没有完成实例化

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

  • 定期尝试访问它,直到它工作或
  • (更好)在页面加载完成后将插件调用放入页面
在这两种情况下,您都希望在“合理”的时间后暂停,并得出以下结论:

  • 未能加载或删除
  • 插件被阻止(插件被设置为单击播放或某个扩展插件被阻止)

。。。MDN上对此有一个解释。

:有没有办法通过Java脚本知道是否加载了浏览器插件。如果我知道我可以重新加载页面,你可以通过上面的方法知道它是否在某个时间范围内加载,但你不能确定为什么它没有加载(插件未能实例化,是单击播放,…).