Android WebView

本文详细介绍了WebView的基本概念及其在Android平台上的应用。包括WebView的安全性问题、如何处理自定义URL方案、加载进度监听等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

WebView,类似PC浏览器,接收到http/https的url时向host发送一个请求。
Android API 4.4以前,谷歌的webview存在安全漏洞,网站可以通过js注入就可以随便拿到客户端的重要信息,之后需在调用Java方法加入@JavascriptInterface注解,才可执行。

Javascript bridge。

示例

webview 不调用系统自带浏览器

WebView webView = new WebView(this);
webView.loadUrl("http://www.baidu.com");
WebSettings webSet = webView.getSettings();    
webView.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url)
		        { //  重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边
	             view.loadUrl(url);
	             return true;
		        }
	});

WebView的坑

webview有一些坑,比如4.4以下图片无法删除,还有些光标问题。

NET::ERR_UNKNOWN_URL_SCHEME
打开自定义协议的URL时,报错。WebView只支持http/https请求,无法处理自定义协议的URL。
解决方法:是自定义协议,就换成原生调用(intent跳转)。

WebViewClient mWebViewClient = new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        if (url == null) return false;
        try {
            if (url.startsWith("weixin://") || url.startsWith("alipays://") ||
                    url.startsWith("mailto://") || url.startsWith("tel://")//自定义scheme
                    ) {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
                return true;
            }
        } catch (Exception e) {
            //防止没安装处理某个scheme开头的url的App,导致Crash。
            return false;
        }
        //处理http和https开头的url。
        webView.loadUrl(url);
        return true;
    }
};

加载进度框,监听加载进度

webView.setWebChromeClient(new WebChromeClient(){  
	@Override  
	public void onProgressChanged(WebView view, int newProgress) {  
	// TODO 自动生成的方法存根  
	if(newProgress==100){  
		pg1.setVisibility(View.GONE);//加载完网页进度条消失  
	}else{  
		pg1.setVisibility(View.VISIBLE);//开始加载网页时显示进度条  
		pg1.setProgress(newProgress);//设置进度值  
		}              
	}  
});  

资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值