Плагин NPAPI не загружается при установке, а вызов метода плагина браузера завершается ошибкой

У меня есть плагин браузера для Safari/Firefox на Mac. Когда пользователь запускает веб-страницу, он попросит пользователя загрузить плагин. В идеале он должен автоматически обновлять страницу после завершения загрузки и использовать плагин.

Код может обнаружить плагин, но когда я вызываю метод в плагине, он выдает исключение. Если я вручную обновлю страницу и вызову метод плагина, я смогу это сделать.

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

}

после установки страница должна обновляться автоматически. Этот код работает нормально, если обновить страницу вручную.


person Chris_vr    schedule 07.08.2013    source источник


Ответы (1)


Я не вижу, где это обновляет страницу. Что должно работать, так это повторное создание плагина (например, переключив его на display:none и обратно).

Это также выглядит так, как будто вы слишком рано обращаетесь к плагину — возможно, плагин еще не завершил создание экземпляра.

Найдя его в списке navigator.plugins и (повторно) создав экземпляр, вы можете:

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

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

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

... для этого есть статья с рекомендациями МДН.

person Georg Fritzsche    schedule 07.08.2013
comment
:Есть ли способ узнать, загружен ли плагин браузера через Java-скрипт. Если я знаю, что могу перезагрузить страницу - person Chris_vr; 08.08.2013
comment
Вы можете сказать, загружен ли он в течение определенного периода времени с помощью описанных выше подходов, но вы не можете точно сказать, почему он не загрузился в нем (не удалось создать экземпляр плагина, он воспроизводится по клику, .. .). - person Georg Fritzsche; 08.08.2013