我使用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");
答案 0 :(得分:1)
首先尝试更新Firefox;在旧版本的firefox中有一个错误,它有时会交换两个发送到桥上的NPObject,给你一个不同于你应该拥有的对象。
将您的插件()调用移至父作用域,这样您每次都不会调用它
将此部分分成不同的行,以便您可以准确查看错误发生的位置
像这样:
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移出可能会产生影响;做那些测试并报告结果,这可能有助于我们弄清楚发生了什么。