mirror of https://github.com/axmolengine/axmol.git
Merge pull request #12301 from jianglong0156/webviewCrash
fix webview crash in android
This commit is contained in:
commit
9acc51a5eb
|
@ -20,20 +20,23 @@ static bool jsb_cocos2dx_experimental_webView_setOnShouldStartLoading(JSContext
|
||||||
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
|
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
|
||||||
std::shared_ptr<JSFunctionWrapper> func(new JSFunctionWrapper(cx, obj, args.get(0)));
|
std::shared_ptr<JSFunctionWrapper> func(new JSFunctionWrapper(cx, obj, args.get(0)));
|
||||||
cobj->setOnShouldStartLoading([=](experimental::ui::WebView *sender, const std::string &url)->bool{
|
cobj->setOnShouldStartLoading([=](experimental::ui::WebView *sender, const std::string &url)->bool{
|
||||||
jsval arg[2];
|
Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]
|
||||||
js_proxy_t *proxy = js_get_or_create_proxy(cx, sender);
|
{
|
||||||
if(proxy)
|
JSB_AUTOCOMPARTMENT_WITH_GLOBAL_OBJCET
|
||||||
arg[0] = OBJECT_TO_JSVAL(proxy->obj);
|
jsval arg[2];
|
||||||
else
|
js_proxy_t *proxy = js_get_or_create_proxy(cx, sender);
|
||||||
arg[0] = JSVAL_NULL;
|
if(proxy)
|
||||||
arg[1] = std_string_to_jsval(cx, url);
|
arg[0] = OBJECT_TO_JSVAL(proxy->obj);
|
||||||
JS::RootedValue rval(cx);
|
else
|
||||||
|
arg[0] = JSVAL_NULL;
|
||||||
|
arg[1] = std_string_to_jsval(cx, url);
|
||||||
|
JS::RootedValue rval(cx);
|
||||||
|
|
||||||
bool ok = func->invoke(2, arg, &rval);
|
bool ok = func->invoke(2, arg, &rval);
|
||||||
if (!ok && JS_IsExceptionPending(cx)) {
|
if (!ok && JS_IsExceptionPending(cx)) {
|
||||||
JS_ReportPendingException(cx);
|
JS_ReportPendingException(cx);
|
||||||
}
|
}
|
||||||
return true;
|
});
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -50,19 +53,23 @@ static bool jsb_cocos2dx_experimental_webView_setOnDidFinishLoading(JSContext *c
|
||||||
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
|
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
|
||||||
std::shared_ptr<JSFunctionWrapper> func(new JSFunctionWrapper(cx, obj, args.get(0)));
|
std::shared_ptr<JSFunctionWrapper> func(new JSFunctionWrapper(cx, obj, args.get(0)));
|
||||||
cobj->setOnDidFinishLoading([=](experimental::ui::WebView *sender, const std::string &url)->void{
|
cobj->setOnDidFinishLoading([=](experimental::ui::WebView *sender, const std::string &url)->void{
|
||||||
jsval arg[2];
|
Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]
|
||||||
js_proxy_t *proxy = js_get_or_create_proxy(cx, sender);
|
{
|
||||||
if(proxy)
|
JSB_AUTOCOMPARTMENT_WITH_GLOBAL_OBJCET
|
||||||
arg[0] = OBJECT_TO_JSVAL(proxy->obj);
|
jsval arg[2];
|
||||||
else
|
js_proxy_t *proxy = js_get_or_create_proxy(cx, sender);
|
||||||
arg[0] = JSVAL_NULL;
|
if(proxy)
|
||||||
arg[1] = std_string_to_jsval(cx, url);
|
arg[0] = OBJECT_TO_JSVAL(proxy->obj);
|
||||||
JS::RootedValue rval(cx);
|
else
|
||||||
|
arg[0] = JSVAL_NULL;
|
||||||
|
arg[1] = std_string_to_jsval(cx, url);
|
||||||
|
JS::RootedValue rval(cx);
|
||||||
|
|
||||||
bool ok = func->invoke(2, arg, &rval);
|
bool ok = func->invoke(2, arg, &rval);
|
||||||
if (!ok && JS_IsExceptionPending(cx)) {
|
if (!ok && JS_IsExceptionPending(cx)) {
|
||||||
JS_ReportPendingException(cx);
|
JS_ReportPendingException(cx);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -79,19 +86,23 @@ static bool jsb_cocos2dx_experimental_webView_setOnDidFailLoading(JSContext *cx,
|
||||||
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
|
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
|
||||||
std::shared_ptr<JSFunctionWrapper> func(new JSFunctionWrapper(cx, obj, args.get(0)));
|
std::shared_ptr<JSFunctionWrapper> func(new JSFunctionWrapper(cx, obj, args.get(0)));
|
||||||
cobj->setOnDidFailLoading([=](experimental::ui::WebView *sender, const std::string &url)->void{
|
cobj->setOnDidFailLoading([=](experimental::ui::WebView *sender, const std::string &url)->void{
|
||||||
jsval arg[2];
|
Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]
|
||||||
js_proxy_t *proxy = js_get_or_create_proxy(cx, sender);
|
{
|
||||||
if(proxy)
|
JSB_AUTOCOMPARTMENT_WITH_GLOBAL_OBJCET
|
||||||
arg[0] = OBJECT_TO_JSVAL(proxy->obj);
|
jsval arg[2];
|
||||||
else
|
js_proxy_t *proxy = js_get_or_create_proxy(cx, sender);
|
||||||
arg[0] = JSVAL_NULL;
|
if(proxy)
|
||||||
arg[1] = std_string_to_jsval(cx, url);
|
arg[0] = OBJECT_TO_JSVAL(proxy->obj);
|
||||||
JS::RootedValue rval(cx);
|
else
|
||||||
|
arg[0] = JSVAL_NULL;
|
||||||
|
arg[1] = std_string_to_jsval(cx, url);
|
||||||
|
JS::RootedValue rval(cx);
|
||||||
|
|
||||||
bool ok = func->invoke(2, arg, &rval);
|
bool ok = func->invoke(2, arg, &rval);
|
||||||
if (!ok && JS_IsExceptionPending(cx)) {
|
if (!ok && JS_IsExceptionPending(cx)) {
|
||||||
JS_ReportPendingException(cx);
|
JS_ReportPendingException(cx);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -108,19 +119,23 @@ static bool jsb_cocos2dx_experimental_webView_setOnJSCallback(JSContext *cx, uin
|
||||||
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
|
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
|
||||||
std::shared_ptr<JSFunctionWrapper> func(new JSFunctionWrapper(cx, obj, args.get(0)));
|
std::shared_ptr<JSFunctionWrapper> func(new JSFunctionWrapper(cx, obj, args.get(0)));
|
||||||
cobj->setOnJSCallback([=](experimental::ui::WebView *sender, const std::string &url)->void{
|
cobj->setOnJSCallback([=](experimental::ui::WebView *sender, const std::string &url)->void{
|
||||||
jsval arg[2];
|
Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]
|
||||||
js_proxy_t *proxy = js_get_or_create_proxy(cx, sender);
|
{
|
||||||
if(proxy)
|
JSB_AUTOCOMPARTMENT_WITH_GLOBAL_OBJCET
|
||||||
arg[0] = OBJECT_TO_JSVAL(proxy->obj);
|
jsval arg[2];
|
||||||
else
|
js_proxy_t *proxy = js_get_or_create_proxy(cx, sender);
|
||||||
arg[0] = JSVAL_NULL;
|
if(proxy)
|
||||||
arg[1] = std_string_to_jsval(cx, url);
|
arg[0] = OBJECT_TO_JSVAL(proxy->obj);
|
||||||
JS::RootedValue rval(cx);
|
else
|
||||||
|
arg[0] = JSVAL_NULL;
|
||||||
|
arg[1] = std_string_to_jsval(cx, url);
|
||||||
|
JS::RootedValue rval(cx);
|
||||||
|
|
||||||
bool ok = func->invoke(2, arg, &rval);
|
bool ok = func->invoke(2, arg, &rval);
|
||||||
if (!ok && JS_IsExceptionPending(cx)) {
|
if (!ok && JS_IsExceptionPending(cx)) {
|
||||||
JS_ReportPendingException(cx);
|
JS_ReportPendingException(cx);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue