Firebreath JavaScript错误:不支持:类型函数中没有toString()函数

时间:2012-02-10 12:59:30

标签: javascript browser-plugin firebreath

我使用firebreath框架编写浏览器插件。当我使用javascript插件时,我得到一个奇怪的错误:

unsupported: no toString() function in type function

当我尝试在我的Dropbox_pluginAPI类上调用多次返回JSAPIPtr的方法时,我收到此错误。

以下是代码:

 //JavaScript context
for(var i=0; i<100; i++)
{
//After several times of calling the method I get the error: unsupported: no toString() function in type function
var md = plugin().getMetaDataOfFileOrFolder("dropbox/demotext","null",true,false,"null"); 
}


//API class

FB::JSAPIPtr Dropbox_pluginAPI::getMetaDataOfFileOrFolder(std::string fileOrFolderPath,std::string hash, bool list, bool include_deleted,
std::string rev)
{
MetaData m = client->getMetaDataOfFileOrFolder(fileOrFolderPath,hash,list,include_deleted,rev);

return boost::make_shared<MetaDataAPI>(m_host,m);

}


//MetaDataAPI class
class MetaDataAPI : public FB::JSAPIAuto
{
public:

/**
* Constructor.
* @param host The browser
* @param m The MetaData object
*/
MetaDataAPI(const FB::BrowserHostPtr& host,MetaData m);

.....
.....

}

我希望有人和firebreath合作,可以帮助我!


我将firefox版本和分隔的部分更新为不同的行,但错误仍然存​​在。 我做了以下事情:

var plug = plugin();
var fn = plug.getMetaDataOfFileOrFolder;
var md;
for(var i=0; i<100; i++)
{
    md = fn("dropbox/demotext","null",true,false,"null"); 
}   
alert("Finish");

永远不会调用警报!一些电话后仍然有错误:

    [unsupported: no toString() function in type function]

排队:

    md = fn("dropbox/demotext","null",true,false,"null"); 

1 个答案:

答案 0 :(得分:1)

  1. 首先尝试更新Firefox;在旧版本的firefox中有一个错误,它有时会交换两个发送到桥上的NPObject,给你一个不同于你应该拥有的对象。

  2. 将您的插件()调用移至父作用域,这样您每次都不会调用它

  3. 将此部分分成不同的行,以便您可以准确查看错误发生的位置

  4. 像这样:

    var plug = plugin();
    for(var i=0; i<100; i++)
    {
        var fn = plug.getMetaDataOfFileOrFolder;
        var md = fn("dropbox/demotext","null",true,false,"null"); 
    }
    

    假设错误仍然存​​在,它会告诉我们很多它是在var fn行还是var md行。您也可以尝试将var fn行移出循环,看看是否有任何作用。

    如果问题与firefox bug有关,那么将var fn移出可能会产生影响;做那些测试并报告结果,这可能有助于我们弄清楚发生了什么。