WebView遇到的问题

1.场景说明:进行芝麻认证:通过webview打开支付宝提供的H5,传入姓名和身份证号码进行认证,认证成功后,在回调中我们打开了一个显示“认证成功”的界面,并包含一个确定按钮,点击这个按钮之后关闭整个activity

2.神坑过程:点击按钮关闭activity这个操作,一般都是用android与js的交互,这个我就不多说了。但ios那边不知什么原因,提出的方案是要通过弹出alert的方式,说只能用这样的方式(感到不解),没办法只能用这种方式,在alert的触发回调中处理,代码如下:

    webView.setWebChromeClient(new WebChromeClient() {

            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                System.out.println("onJsAlert");
                //alert 回调 :跳转,关闭webviewActivity

                Intent intent =   new Intent(WebViewActivity.this, MainContentActivity.class);
                intent.putExtra("index","webview");
                startActivity(intent);
                finish();
                return true;
            }
   }

3.出现bug:按照上面的写了之后出现了这样的问题,完成认证之后,跳转到其它的界面后,再次进入webview之后,webview加载不出内容了,白屏一片。OK,没问题,加载不出来无所谓啦,大不了重进,忽悠产品说,偶尔出现而已啦。然而啊,你重进页面没有用,你会发现整个应用任何用webview的地方都加载不出东西来,好了,玩不下去了。
跟下去,发现底层有一条叫webcore(印象中是这个名字)的线程一直处于wait的状态,再也恢复不了了,唯一拯救就是杀进程。

4.解决:首先找到了触发原因,只要点击“确认按钮”就出现了这样的bug。
然后研究了一下onJsAlert 发现,在回调中必须处理result才行,添加之后,解决问题。

     webView.setWebChromeClient(new WebChromeClient() {

            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
        
                result.cancel();//必须处理,否则会出现问题。
                Intent intent =   new Intent(WebViewActivity.this, MainContentActivity.class);
                intent.putExtra("index","webview");
                startActivity(intent);
                finish();
                return true;
            }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容