2013-07-22 3 views
0

Я разрабатываю плагин NPAPI для Firefox на окнах. вот мой Java-скрипт:NPAPI Plugin [FireFox]: Invoke()/HasProperty()/HasMethod() не получает вызов

document.addEventListener('load', documentLoad, true); 


function loadPlugin(doc) 
{ 
    var objWebMon = doc.getElementById("my_firefox"); 

    if(!objWebMon) 
    { 
     var objWebMonEmbed = doc.createElement('embed'); 
     objWebMonEmbed.setAttribute('id', 'my_firefox'); 
     objWebMonEmbed.setAttribute('type', 'application/npplugin'); 
     objWebMonEmbed.setAttribute('style', 'height: 10px; width:10px; display:block;'); 
     if(doc.body) 
     { 
      doc.body.insertBefore(objWebMonEmbed, doc.body.firstChild); 

     } 
    } 
} 
function documentLoad(event) { 
    try 
    { 
    var doc = event.originalTarget; // doc is document that triggered "onload" event 
    loadPlugin(doc); 
     var myplugin = doc.getElementById('my_firefox'); 
     if(myplugin) 
     { 
       myplugin(); 
      myplugin.myAction(); 

     } 
    } catch(err) 
    { 
    } 
} 

, как я называю MyPlugin()

bool ScriptablePluginObject::InvokeDefault(const NPVariant *args, uint32_t argCount, NPVariant *result) 

вызывается успешно, но на вызове функции myplugin.myAction()

bool ScriptablePluginObject::Invoke(NPIdentifier name, const NPVariant *args, 
           uint32_t argCount, NPVariant *result) 

функция не вызывается. Я объявил myAction внутри ScriptablePluginObject::HasProperty(NPIdentifier name) даже HasProperty Метод не получает вызов.

Внутри блока catch я получаю эту ошибку. TypeError: fasso.myAction is not a function.

+1

Вызывается ли 'HasMethod()' вызов? –

+0

Thanks Georg Fritzsche за ответ Нет, его не называют. – Nik

+0

Итак, вы должны обрабатывать свою функцию в HasMethod(), это не свойство. Интересная часть заключается в том, что HasMethod() не получает вызов. Возможно, ваш плагин разбился в InvokeDefault()? –

ответ

0

Вот несколько вещей, чтобы попробовать:

  1. Используйте объект тег вместо врезать - я имел более последовательный успех с объектными тегами, несмотря на широкую популярность с использованием встраивать
  2. Никогда не устанавливайте тип объекта или вставляйте тег, прежде чем добавлять его в DOM - это приводит к тому, что он создает экземпляр плагина и затем помещает его в своеобразное странное состояние, когда оно перемещается. Я не думаю, что на этот раз это вызвало вашу проблему, но стоит попробовать.
  3. Возможно, вам потребуется небольшая задержка между вставкой hte-плагина в DOM и его использованием. Попробуйте добавить setTimeout с задержкой в ​​50 мс и получить доступ к плагину в функции обратного вызова.

Честно говоря, №3, я думаю, что, скорее всего, это будет иметь значение, но я представляю двух других, поскольку они укусили меня по странным вещам в прошлом. Удачи!