为什么使用Chrome和IE的firebreath 2.0插件方法中convert_cast的行为存在差异

时间:2016-06-23 10:09:30

标签: firebreath

美好的一天。

我的firebreath 2.0插件中有下一个方法:

void A::get_string(const FB::JSObjectPtr& myclassObj)
{
    FB::variantPromise a = myclassObj->Invoke("mymethod", FB::VariantList{ "test" });
    a.then<void>([this](FB::variant ret) {
        std::string Str = ret.convert_cast<std::string>();
        return;
    });
}
myclassObj中的mymethod是:

std::string B::mymethod(std::string tStr)
{
    return tStr;
}

std :: string&#34; test&#34;预计将在Str中,但在我从浏览器调用get_string之后,存在行为差异: 当我使用Chrome时,我会在ret中获得字符串并且转换正常。 当我使用IE时,我在ret中得到shared_ptr而我无法从中获取我的字符串。在这种情况下,我在转换中获得异常。

请帮我确定我做错了什么:)

P.S。没关系,我想要得到的东西:std :: string,long或者smth else,在chrome转换中没问题,但在IE中我只得到shared_ptr。

实际上,我想在get_string方法中获得指向myclassObj的指针,但是因为代理类而被卡住了。所以,我试图使用std :: string来获取指针。

1 个答案:

答案 0 :(得分:0)

你必须调试实际发生的事情; FireBreath 2的IE界面可能存在错误,因为我认为它没有经过广泛测试。如果是这样,你可能会发现并修复它 - 这是开源的优势!

不是将对象从浏览器传回来,而是建议使用您传入的某种标识符,然后在插件端使用地图或其他内容查找对象。这样你就没有通过浏览器代理的所有开销