COCOS2D-JS 3.6.1 WEBVIEW 安卓 崩溃,具体情况如下:
HTML里通过调用JAVA 的方法,调用APP里的方法,显示或不显示WEBVIEW,多次操作后APP崩溃。
我觉得这是个BUG,希望COCOS团队能查看下。
更新:自己检查JAVA代码 找到原因并解决:
JAVA 里不能直接调用:Cocos2dxJavascriptJavaBridge.evalString(evalStr); 也不能放在UI线程调用,需要放在GL线程调用就正常了。
修改正确的方法:
public static void callAppFun(final String evalStr){
sCocos2dxActivity.runOnGLThread(new Runnable() {
@Override
public void run() {
Cocos2dxJavascriptJavaBridge.evalString(evalStr);
}
});
}
JAVA:
final class JSBridge {
JSBridge() {}
@JavascriptInterface
public void callAppFun(String evalStr) {
//Cocos2dxWebViewHelper.callAppFun(name,params);
Log.e("play2learn","callAppFun:"+evalStr);
Cocos2dxJavascriptJavaBridge.evalString(evalStr);
}
@JavascriptInterface
public void log(String info) {
Log.e("play2learn",info);
}
}
APP JS:
TestPage.prototype._openWeb=function(url){
var _self=this;
var viewport = cc.visibleRect;
if(window.webView==null){
var webView = new ccui.WebView();
webView.setAnchorPoint(0,1);
webView.setContentSize(viewport.width, viewport.height);
webView.x = viewport.topLeft.x;
webView.y = viewport.topLeft.y;
webView.setScalesPageToFit(true);
webView.setEventListener(ccui.WebView.EventType.LOADED, function(sender, url){
Utils.log(sender);
cc.log("webview LOADED url:" + url);
});
webView.setEventListener(ccui.WebView.EventType.LOADING, function(sender, url){
cc.log("webview LOADING url:" + url);
});
webView.setEventListener(ccui.WebView.EventType.ERROR, function(sender, url){
cc.log("webview ERROR url:" + url);
});
window.webView = webView;
window.closePage=function(){
Utils.log("app js got closePage call from html");
webView.visible=false;
//_self.removeChild(webView);
}
}
Utils.log("_openWeb:"+url);
if(window.webView.parent!=null){
window.webView.visible=true;
}else{
this.addChild(window.webView);
}
if(url.indexOf("http")<0){
window.webView.loadFile(url);
}else{
window.webView.loadURL(url);
}
}
_self._openWeb(“http://192.168.1.108/git/play2learn/dev/res/web/login.html”);
HTML JS:
JSBridge.callAppFun(“closePage()”);
HTML: