2013-07-22 47 views
0

我正在爲Windows開發Firefox的NPAPI插件。這裏是我的Java腳本:NPAPI插件[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) 

功能不叫。我已經在ScriptablePluginObject::HasProperty(NPIdentifier name)裏面聲明myAction,即使是HasProperty方法也沒有被調用。

內部catch塊我得到這個錯誤。 TypeError: fasso.myAction is not a function

+1

是否調用了'HasMethod()'? –

+0

感謝Georg Fritzsche的回覆不,它沒有被調用。 – Nik

+0

所以你應該在HasMethod()中處理你的函數,它不是一個屬性。有趣的部分是HasMethod()沒有被調用。也許你的插件在InvokeDefault()中崩潰? –

回答

0

這裏有幾件事情嘗試:

  1. 使用一個對象標籤,而不是嵌入 - 我已經與對象標記更持續的成功,儘管使用嵌入廣泛的知名度
  2. 在將它添加到DOM之前,永遠不要設置對象或嵌入標籤的類型 - 這樣做會導致它實例化插件,並在它移動時將其放入一個奇怪的狀態。我認爲這次不會引起你的問題,但值得一試。
  3. 將hte插件插入DOM並使用它可能需要稍微延遲。嘗試添加延遲50ms的setTimeout並訪問回調函數中的插件。

老實說,#3是我認爲最有可能會有所作爲的那個,但是我介紹了另外兩個,因爲他們在過去讓我陷入了奇怪的事情。祝你好運!