【问题标题】:Javascript isn't execute within onJAlert callback after new Android System Webview updated更新新的 Android 系统 Webview 后,Javascript 未在 onJalert 回调中执行
【发布时间】:2016-08-15 10:11:36
【问题描述】:

|在Android System Webview (52.0.2743.98) 最新更新后,我注意到使用onJsAlert 方法无法执行javascript。

更具体地说,以下代码在最新更新后停止工作

private class MyWebChromeClient extends WebChromeClient {

    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {

            view.loadUrl(javascript:(function(){CustomInterface.completeAction(document.head.innerHTML)})());

        return super.onJsAlert(view, url, message, result);
    }

}

我也检查了接口设置是否正确

  mWebView.setWebChromeClient(new MyWebChromeClient());

    WebSettings webSettings = mWebView.getSettings();      
    webSettings.setJavaScriptEnabled(true);
    mWebView.addJavascriptInterface(new CustomInterface(), "CustomInterface"); 

有人遇到过同样的问题吗?

【问题讨论】:

    标签: javascript android webview webchromeclient


    【解决方案1】:

    当我为 onJalert 返回 false 时,给了我解决方案的提示

     @Override 
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
    
                view.loadUrl(javascript:(function(){CustomInterface.completeAction(document.head.innerHTML)})());
    
            return false;
        } 
    

    如果客户端返回 true,WebView 将假定客户端将处理对话框。如果客户端返回false,它将继续执行。因此,通过返回 false,我的 UI 上出现了一个对话框,当我按下 ok 时,javascript 被执行。所以我只是从 JsResult 中调用了确认,就像按下 OK 按钮

       @Override 
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                result.confirm();
                view.loadUrl(javascript:(function(){CustomInterface.completeAction(document.head.innerHTML)})());
    
            return true;
        } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 2013-06-17
      相关资源
      最近更新 更多