2013-08-07 424 views
0

我有浏览器插件的Safari/Firefox在Mac.When用户启动网页时,它会要求用户下载插件。按理说,它应该刷新页面时自动下载完成并利用插件。NPAPI插件没有得到加载时,安装和浏览器插件方法调用失败

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

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

} 

页安装后应该自动刷新 这是代码,如果手动刷新页面,做工精细。

回答

0

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

这也看起来像你可能很快访问插件 - 插件可能还没有完成实例化。

发现后,它在navigator.plugins和(重新)上市的实例,你可以:

  • 定期尝试访问它,直到它的工作原理或
  • (更好)有你的插件调用到页面时,它完成加载

在这两种情况下,你会希望有一个“合理”的时间后超时,并得出结论:要么

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

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

+0

:有没有什么办法可以知道是否通过Java脚本加载了浏览器插件。如果我知道我可以重新加载页面 –

+0

您可以通过上面的方法判断它是否在特定的时间范围内加载,但你不能确定它为什么没有加载它(插件未能实例化,是点击播放,...)。 –

相关问题