【问题标题】:NPAPI Plugin[FireFox]: Invoke() / HasProperty() / HasMethod() not getting calledNPAPI 插件 [FireFox]:未调用 Invoke() / HasProperty() / HasMethod()
【发布时间】:2013-07-22 14:16:55
【问题描述】:

我正在为 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)

函数没有被调用。我已经在 ScriptablePluginObject::HasProperty(NPIdentifier name) 中声明了 myAction,甚至 HasProperty 方法也没有被调用。

在 catch 块内我收到此错误。 TypeError: fasso.myAction is not a function.

【问题讨论】:

  • HasMethod() 被调用了吗?
  • 感谢 Georg Fritzsche 的回复不,它没有被调用。
  • 所以你应该在 HasMethod() 中处理你的函数,它不是一个属性。有趣的是 HasMethod() 没有被调用。也许您的插件在 InvokeDefault() 中崩溃了?

标签: npapi browser-plugin


【解决方案1】:

这里有几件事可以尝试:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多