添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

首先需要设置webview支持js,在Android 9.0后,访问地址如果是http开头的,还需要在配置文件里设置允许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,在这个方法回调的时候可以加载错误页面。
WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等,有以下常用方法。

onJsAlert webview不支持js的alert弹窗,需要自己监听然后通过dialog弹窗
onReceivedTitle 获取网页标题
onReceivedIcon 获取网页icon
onProgressChanged 加载进度回调
所以要解决弹窗无法显示问题需要重写WebChromeClient,这样加上基础的设置就可以显示JS 的Alert
 

mWebView.setWebChromeClient(new WebChromeClient());

webView获取权限问题

试过在程序上动态赋予摄像头权限后,开启网页调用摄像头还是会提示权限被拒绝,原因是Android 浏览器上回调默认是拒绝的,还是需要重webChromeClient里面的方法,手动赋予,或者自定义dialog提示用户是否授权,在这里我就直接给它授权了

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支持js,在Android 9.0后,访问地址如果是http开头的,还需要在配置文件里设置允许http访问:android:usesCleartextTraffic=“true”webview基础设置:WebSettings webSettings=mWebView.getSettings(); webSettings.setJavaScriptEnabled(true);//允许使用js webSettings.setDomStor 办过支付宝大宝卡和腾讯的大王卡的都知道这玩意,办卡的时候就需要进行实名认证,人脸识别; 本来第三方平台(xxx流量公司)说的是直接用WebView加载这个H5界面就完事了,我心想这么简单,那不是分分钟的事,放着后面做(公司就我一个安卓,所以开发都是我说的算^_^,独立开发有的时候还是挺爽); 结果到项目快要上线的时候... String url = "http://www.baidu.com"; final ProgressDialog dialog = new ProgressDialog(this); dialog.setMessage("加载资源..."); dialog.show(); created() { if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia) { this.getUserMedi...
随着互联网的发展,移动互联网的普及,手机APP已成为人们使用最多的移动终端产品之一。随着越来越多的APP应用的涌现,越来越多的APP需要内嵌H5页面WebView进行网页的展示和交互。WebView是一种可在应用程序中嵌入Web页面的控件,可以用来显示来自互联网上的Web页面。它可以实现在应用中展示网页或在线功能,解决一些本地应用无法实现的功能。下面,我们分别从用户、开发者两个方面来探讨APP内嵌H5页面WebView的优缺点。 一、用户方面: 1.节省时间:在APP中直接查看嵌入的网页,省去了用户手动打开浏览器输入网址的步骤; 2.良好的用户体验:页面加载速度相对较快,而且对主应用对内存占用少,不影响其他应用的使用; 3.方便分享:在WebView中打开的网页可以长按复制网址链接,方便分享给其它用户; 4.强大的交互能力:在APP中嵌入H5页面,拓展了应用的交互能力。 1.便捷性带来的安全隐患:一些App会在内嵌的H5页面中嵌入第三方广告,导致用户隐私泄露; 2.缺乏统一标准:因为浏览器的内核和引擎都是不同的,所以在不同的WebView中,同一网页的显示效果和交互体验可能会有差异。 二、开发者方面: 1.拓展应用功能:借助WebView内嵌H5页面,应用的功能可以得到极大的拓展; 2.代码复用:WebView可以实现HTML、CSS等内容的兼容,减轻了移动开发者负担; 3.节省开发成本:相对于开发单独的H5 APP,内嵌方式更为灵活,可以适用于不同场景和需求。 1.不支持多线程:WebView在JS调用本地方法的时候是在同一线程下执行的,如果WebView的内容较为复杂,可能会导致主线程卡顿; 2.性能问题:在内存管理、布局排版等方面还不如原生应用; 3.浏览器兼容性:WebView的内核并没有得到很好的统一,不同的WebView之间有兼容性问题,会导致页面显示和交互问题; 4.安全问题WebView加载HTML页面时容易受到跨站脚本(XSS)和恶意代码注入等安全漏洞的攻击。为此,开发者应该加强前端页面安全防范,对浏览器缓存和Cookie进行管理并开启CSP(内容安全策略)。 综合来看,在APP内嵌H5页面WebView上,开发者需要在开发时注意安全方面的问题,同时还需要加强对WebView性能和兼容性的了解和优化。用户便捷性和良好的用户体验,也需要开发者在开发时重视。