1

我正在使用 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"); 
4

1 回答 1

1
  1. 首先尝试更新Firefox;在旧版本的 firefox 中存在一个错误,它有时会交换通过桥发送的两个 NPObject,从而为您提供与您应该拥有的不同的对象。

  2. 将您的 plugin() 调用移动到父范围,这样您就不会每次都调用它

  3. 将其分成不同的行,以便您可以准确地看到错误发生的位置

像这样:

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 错误有关,那么将 var fn 移出可能会有所作为;做这些测试并报告结果,这可能有助于我们弄清楚发生了什么。

于 2012-02-10T16:55:33.460 回答