2014-01-28 2 views
0

Firebreath Framework을 기반으로하는 플러그인을 만들었습니다. 플러그 인의 적절한 기능을 구현하는 이벤트를 구현했습니다.Firebreath Events Acknowledgement

Firebreath 이벤트는 아래의 방법 JSAPIAuto.cpp 클래스에서 비동기 적으로 해고 :

void FB::JSAPIAuto::fireAsyncEvent(const std::string& eventName, const std::vector<variant>& args)

내가 같은 사용 나누었다 나는 그것이 해고 할 때 동일한 이벤트의 승인을 얻으려면 일부 콜백 또는 기타를 통해 JSAPIAuto.cpp .. 동일한 결과를 기반으로 PluginAPI.cpp에서 다음 기능을 처리 할 수 ​​있습니다.

도움이 될 것입니다!

답변

1

함수의 텍스트를 읽으면 "async"라는 단어가 그 안에 나타남을 알 수 있습니다. FireBreath에서도 이와 같이 발사하는 것은 비동기 적이며 사용자에게 어떤 식 으로든 반환 값. 이벤트가 일부 브라우저에서 구현되는 방식 때문에이를 변경하는 합리적인 방법은 없습니다.

그렇다면 FB::JSObjectPtr에 전달한 함수를 콜백으로 저장하여 사용할 수 있으므로 자신 만의 것을 할 수 있습니다. 당신이 방법 이름으로 ""으로 Invoke을 사용하여 해당 콜백을 호출하는 경우는 자바 스크립트 함수를 호출하고 값을 반환과 같이합니다 :

bool MyScriptingAPI::setCallback(const FB::JSObjectPtr& callback) { 
    FB::variant res = callback->Invoke("", FB::variant_list_of("some")(3)("arguments")); 
    return res.convert_cast<bool>(); 
} 

이 콜백을 호출, bool로하는 결과를 캐스팅 (참/거짓) 그 결과를 javascript로 돌려 보냅니다. 분명히 bool에 캐스트 할 수없는 것이 반환되면 예외가 발생하지만 일반적인 생각을 얻어야합니다.