美文网首页
Android WebView

Android WebView

作者: 和尚无花 | 来源:发表于2022-07-17 19:56 被阅读0次

    常见问题

    js调用android方法和传递参数

    binding.webView.getSettings().setJavaScriptEnabled(true); // 设置支持javascript脚本
    binding.webView.addJavascriptInterface(new JsBackI(), "android");  // 向webview注册一个Java对象, android为对象名称,js中会使用,JsBackI为自定义的注入JavaScript的Java类
     class JsBackI {
            @JavascriptInterface
            public void returnBack(String value) {
                 //根据value值写自己的逻辑
                  // **这里的value,如果js端直接传递对象是接收不到的,需要转化成json字符串传递。** 参数可以是多参数
            }
    }
    

    shouldOverrideUrlLoading不被调用问题

    解决方式:h5使用window.open。android 端适配window.open。
    参考代码:

          //设置
            binding.webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//支持js调用window.open方法
            binding.webView.getSettings().setAllowFileAccess(true);// 设置允许访问文件数据
             binding.webView.getSettings().setSupportMultipleWindows(true);// 设置允许开启多窗口
            binding.webView.getSettings().setDomStorageEnabled(true);// 
             binding.webView.getSettings().setJavaScriptEnabled(true);// 设置支持javascript
    
    binding.webView.setWebChromeClient(new WebChromeClient() {
                @Override
                public void onProgressChanged(WebView view, int newProgress) {
                    super.onProgressChanged(view, newProgress);
                }
    
                @Override
                public void onCloseWindow(WebView window) {
                    super.onCloseWindow(window);
                  
                }
    
                @Override
                public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
    
                    WebView newWebView = new WebView(mActivity); //新创建一个webview
                      newWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//支持js调用window.open方法
           newWebView.getSettings().setAllowFileAccess(true);// 设置允许访问文件数据
             newWebView.getSettings().setSupportMultipleWindows(true);// 设置允许开启多窗口
            newWebView.getSettings().setDomStorageEnabled(true);// 
             newWebView.getSettings().setJavaScriptEnabled(true);// 设置支持javascript
                    newWebView.setWebViewClient(new WebViewClient() {
                        @Override
                        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                
                            gotoNewPage(request);  //添加自己的逻辑
                            return true;
                        }
                    });
                    newWebView.setWebChromeClient(this);
                    //binding.root.addView(newWebView);//需要展示就把webview加载到activity界面上,不需要就不添加
                    WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;//以下的操作应该就是让新的webview去加载对应的url等操作。
                    transport.setWebView(newWebView);
                    resultMsg.sendToTarget();
                    return true;
                }
            });
    

    如有问题,欢迎指正。

    相关文章

      网友评论

          本文标题:Android WebView

          本文链接:https://www.haomeiwen.com/subject/ryblirtx.html