2016-06-23 2 views
0

Добрый день.Почему существуют различия в поведении convert_cast в модуле firebreath 2.0 с использованием Chrome и IE

У меня есть следующий метод в моем 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; 
    }); 
} 

MyMethod в myclassObj является:

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

станд :: строка "тест", как ожидается, будет в Силе, но после того как я вызов get_string из браузера, есть разница в поведении: Когда я использую Chrome, я получаю строку в ret и преобразование в порядке. Когда я использую IE, я получаю shared_ptr в ret, и я не могу получить от него свою строку. В этом случае я получаю исключение в преобразовании.

Пожалуйста, помогите мне определить, что я делаю неправильно :)

P.S. Не имеет значения, что я пытаюсь получить: std :: string, long или smth else, в chrome-преобразовании нормально, но в IE в ret я получаю только shared_ptr.

На самом деле, я хочу получить указатель на myclassObj в методе get_string, но я застрял из-за прокси-классов. Итак, я пытаюсь получить указатель, используя std :: string.

ответ

0

Вам придется отлаживать то, что на самом деле происходит; возможно, есть ошибка в интерфейсе IE FireBreath 2, так как я не думаю, что он был широко протестирован. Если это так, вы, вероятно, можете найти и исправить это - это преимущество открытого исходного кода!

Вместо того, чтобы передавать объекты обратно из браузера, я бы рекомендовал использовать какой-то идентификатор, который вы передаете, а затем искать объект с помощью карты или чего-то со стороны плагина. Таким образом, у вас нет всех накладных расходов на прокси-серверы браузера