Firebreath JavaScript error: unsupported: нет функции toString () в функции type - PullRequest
1 голос
/ 10 февраля 2012

Я использую фреймворк 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 Ответ

1 голос
/ 10 февраля 2012
  1. Сначала попробуйте обновить Firefox; В старой версии Firefox была ошибка, из-за которой иногда переставлялись два NPO-объекта, пересылаемые через мост, давая вам объект, отличный от того, который вы должны были иметь.

  2. переместите вызов вашего плагина () в родительскую область, чтобы вы не вызывали его каждый раз

  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, вероятно, будет иметь значение; проведите эти тесты и сообщите о результатах, которые могут помочь нам понять, что происходит.

...