爱收集资源网

Android浏览器上回调的时候可以加载错误页面吗??

网络整理 2022-05-17 07:09



首先需要设置webview支持js。Android9.0之后,如果访问地址以http开头您没有权限访问 51cto,还需要在配置文件中允许http访问:android:usesCleartextTraffic="true"

webview基本设置:

WebSettings webSettings=mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);//允许使用js
        webSettings.setDomStorageEnabled(true);
        webSettings.setSupportMultipleWindows(true);//允许开发多个窗口
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //设置允许JS弹窗

先介绍一下WebViewClient和WebChromeClient的区别

这两个类在使用WebView的时候基本都会用到,那么它们有什么区别呢?

WebViewClient 主要帮助 WebView 处理各种通知和请求事件。常用的方法有以下几种:

onPageFinished 页面请求完成

onPageStarted 页面开始加载

shouldOverrideUrlLoading 拦截url

onReceivedError 访问错误时回调,例如访问网页时出现错误404,回调该方法时可以加载错误页面。

您没有权限访问 51cto_访问qq空间权限_非好友访问qq空间权限

WebChromeClient主要辅助WebView处理Javascript对话框、网站图标、网站标题、加载进度等,常用的方法有以下几种。

onJsAlert webview不支持js的alert弹窗,需要自己监控然后通过dialog弹窗

onReceivedTitle 获取页面标题

onReceivedIcon 获取网页图标

onProgressChanged 加载进度回调

因此,要解决弹窗无法显示的问题,就需要重写WebChromeClient,让JS Alert的基本设置也能显示出来。

mWebView.setWebChromeClient(new WebChromeClient());

webView获取权限问题

尝试在程序上动态授予摄像头权限后,打开网页调用摄像头仍然会提示权限被拒绝。原因是Android浏览器上的回调默认是拒绝的您没有权限访问 51cto,或者需要重做webChromeClient中的方法,手动授权,或者自定义对话框提示用户是否授权,这里我直接授权

private WebChromeClient mWebChromeClient = new WebChromeClient(){
        @Override
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
            result.confirm();
            return true;
        }
        @Override
        public void onPermissionRequest(PermissionRequest request) {
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
                request.grant(request.getResources());
                request.getOrigin();
            }
        }
    };

就是这样。我认为可以通过授予程序权限来调用相机。原来,要通过浏览器访问摄像头,还需要申请权限。两者不同,所以记录一下。

webview