0

我正在为 Windows 上的 Firefox 开发 NPAPI 插件。这是我的java脚本:

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.

4

1 回答 1

0

这里有几件事可以尝试:

  1. 使用对象标签而不是嵌入——尽管使用嵌入广泛流行,但我在对象标签方面取得了更一致的成功
  2. 永远不要在将对象或嵌入标签添加到 DOM 之前设置它的类型——这样做会导致它实例化插件,然后在移动时将其置于一种奇怪的状态。我不认为这会导致您的问题,但值得尝试。
  3. 在将 hte 插件插入 DOM 和使用它之间,您可能需要稍许延迟。尝试添加一个延迟为 50 毫秒的 setTimeout 并在回调函数中访问插件。

老实说,#3 是我认为最有可能产生影响的一个,但我介绍另外两个,因为它们过去曾因奇怪的事情而咬我。祝你好运!

于 2013-07-23T15:10:28.303 回答