2013-08-07 2 views
0

У меня есть плагин для браузера Safari/Firefox на Mac. При запуске веб-страницы пользователя он попросит пользователя загрузить плагин. Конечно, он должен обновлять страницу автоматически, когда загрузка сделать и использовать плагин.Плагин 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 и (ре) инстанцировании вы могли бы:

  • периодически пытаются доступ к нему, пока он работает или
  • (лучше) есть свой плагин вызова в страницу, когда он закончил загрузку

в обоих случаях вы хотите тайм-аут после того, как «разумный» время и сделать вывод, что либо он

  • не удалось загрузить или
  • плагин блокируется (плагин быть установлен щелкать к игре или некоторое расширение заблокировал его)

... есть best-practices article для этого на MDN.

+0

: Есть ли способ узнать, загружен ли подключаемый модуль браузера или нет через Java-скрипт. Если я знаю, что могу перезагрузить страницу –

+0

Вы можете узнать, загружена ли она в течение определенного периода времени с помощью описанного выше подхода, но вы не можете точно сказать, почему он не загрузился внутри него (плагин не удалось создать экземпляр, щелчок для воспроизведения, ...). –