cocos2d-js 3.6.1 webview 如何禁止后退? WEBVIEW JS 如何关闭自己?【已解决】

安卓平台:

1,请问如何屏蔽后退按键,引起的WEBVIEW的后退。因为现在后退按钮 会让APP后退到主屏幕,再进去APP 就报错了。

IOS 和安卓:

如何在WEB里面通过JS 来关闭WEBVIEW。 我知道原生的做法,我现在想问的是 COCOS带的WEBVIEW APP的JS端应该怎么写 ? 现在JS版本的下面几个事件都不支持。

ccui.WebView.prototype.setEventListener = function(event, callback){

    switch(event)

    {

        case ccui.WebView.EventType.LOADING:

            //this.setOnShouldStartLoading(callback);  //报错

            break;

        case ccui.WebView.EventType.LOADED:

            //this.setOnDidFinishLoading(callback);//报错

            break;

        case ccui.WebView.EventType.ERROR:

           // this.setOnDidFailLoading(callback);//报错

            break;

        case ccui.WebView.EventType.JS_EVALUATED:

            //this.setOnJSCallback(callback);//报错

            cc.log("unsupport web event:" + event);

            break;

        default:

            cc.log("unsupport web event:" + event);

            break;

    }

好吧 自己解决:

public static int createWebView() {
final int index = viewTag;
sCocos2dxActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
Cocos2dxWebView webView = new Cocos2dxWebView(sCocos2dxActivity, index);

            webView.setOnKeyListener(new View.OnKeyListener() {  
                @Override  
                public boolean onKey(View v, int keyCode, KeyEvent event) {  
                    if (event.getAction() == KeyEvent.ACTION_DOWN) {  
                        if (keyCode == KeyEvent.KEYCODE_BACK ) {   
                            
                            return true;    //已处理  
                        }  
                    }  
                    return false;  
                }  
            });

            
            FrameLayout.LayoutParams lParams = new FrameLayout.LayoutParams(
                    FrameLayout.LayoutParams.WRAP_CONTENT,
                    FrameLayout.LayoutParams.WRAP_CONTENT);
            sLayout.addView(webView, lParams);

            webViews.put(index, webView);
        }
    });
    return viewTag++;
}

非常感谢提供解决方法,我刚好碰到了类似问在cocos2d-js 3.10的版本,
根据你提供的方法,已经修复在webview里面点击后退按钮崩溃的问题了,
顺带发现了更好的解决办法,仅供参考

修改Cocos2dxWebView.java 文件,

先引入相关文件
import android.view.KeyEvent;

然后再public class Cocos2dxWebView extends WebView { 内部加入 如下方法 , //从Cocos2dxEditBox复制过来的

 @Override
    public boolean onKeyDown(final int pKeyCode, final KeyEvent pKeyEvent) {
        switch (pKeyCode) {
            case KeyEvent.KEYCODE_BACK:
                Cocos2dxActivity activity = (Cocos2dxActivity)this.getContext();
                //To prevent program from going to background
                activity.getGLSurfaceView().requestFocus();
                return true;
            default:
                return super.onKeyDown(pKeyCode, pKeyEvent);
        }
    }

```



第二个问题: “WEB里面通过JS 来关闭WEBVIEW”

这个已经有实现的API了,不需要修改android项目文件

        var webview = new ccui.WebView("main.html");
        webview.setJavascriptInterfaceScheme("ccjs");
        webview.setOnJSCallback(function (sender, url) {
            cc.log(url);
        });

```


HTML文件使用ccjs:// 这个URL Scheme即可 例如  Back

当点击这个按钮的时候,就可以在cocos2d-js里面捕获的这个事件了。

第二个问题: “WEB里面通过JS 来关闭WEBVIEW”

这个已经有实现的API了,不需要修改android项目文件

        var webview = new ccui.WebView("main.html");
        webview.setJavascriptInterfaceScheme("ccjs");
        webview.setOnJSCallback(function (sender, url) {
            cc.log(url);
        });


HTML文件使用ccjs:// 这个URL Scheme即可 例如  Back



当点击这个按钮的时候,就可以在cocos2d-js里面捕获的这个事件了。




这个可以描述的具体点吗?