WebView的一些基础设置,避免获取不到点击事件

一、基础设置

      //获取webview的配置
        WebSettings settings = webView.getSettings();
        //配置支持domstorage
        settings.setDomStorageEnabled(true);//启用或禁用DOM缓存
        settings.setAppCacheEnabled(false);//关闭/启用应用缓存
        settings.setSupportZoom(true);//是否可以缩放,默认true  
        //settings.setBuiltInZoomControls(false);//是否显示缩放按钮,默认false 
        settings.setJavaScriptEnabled(true);
        settings.setAllowContentAccess(true);
        settings.setUseWideViewPort(true);//设置此属性,可任意比例缩放。大视图模式
        settings.setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题
        settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);

        //下面两方法我们单独来讲
        webView.setWebChromeClient(new WebChromeClient());
        webView.setWebViewClient(new WebViewClient());

在settings完了之后我们再进行url的加载

         webView.loadUrl(url);

二、WebChromeClient

WebChromeClient可以用来辅助WebView处理 JavaScript 的对话框、网站图标、网站title、加载进度等。WebView的内部实现并不是完全使用Chrome的内核,而是部分使用Chome内核,其它都是与Chrome不相同的。它常用函数如下:

/**
 * 通知程序当前页面加载进度
 */
 public void onProgressChanged(WebView view, int newProgress)

/**
 * 当网页调用alert()来弹出alert弹出框前回调,用以拦截alert()函数
 */
public boolean onJsAlert(WebView view, String url, String message,JsResult result)

/**
 * 当网页调用confirm()来弹出confirm弹出框前回调,用以拦截confirm()函数
 */
public boolean onJsConfirm(WebView view, String url, String message,JsResult result)

/**
 * 当网页调用prompt()来弹出prompt弹出框前回调,用以拦截prompt()函数
 */
 public boolean onJsPrompt(WebView view, String url, String message,String defaultValue, JsPromptResult result) 

 /**
 * 打印 console 信息
 */
 public boolean onConsoleMessage(ConsoleMessage consoleMessage)

1.我们可以将onJsAlert、onJsConfirm、onJsPrompt这三个一起来看,他们都是为了处理弹框
比如说我们加载一个网页,它里面有alert、confirm或者prompt弹框功能,这时我们就要加上

mWebView.setWebChromeClient(new WebChromeClient())

否则可能得不到弹框。

2.使用onJsAlert拦截alert()

比如说我们现在点击alert后,不想要他的弹框,直接进行我们自己的操作处理,这个时候就可以重写onJsAlert来实现:

mWebView.setWebChromeClient(new WebChromeClient(){
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                Toast.makeText(context,"屏蔽了弹框",Toast.LENGTH_SHORT).show();
                result.confirm();
                return true;
            }
        });

我们来看下上面的三句代码,
第一句直接进行我们自己的操作弹了个Toast;

JsResult有两个函数:JsResult.confirm()和JsResult.cancel(),JsResult.confirm()表示点击了弹出框的确定按钮,JsResult.cancel()则表示点击了弹出框的取消按钮。在我们调用result.confirm();时就相当于我们直接告诉webView我们点击了确定按钮。如果我们不调用的话只会第一次起作用,后面再点击将会失效。

return true:表示告诉WebView我们已经拦截了alert()函数,不需要再弹出网页中的alert弹出框了,如果我们return false,那么WebView就会认为我们没有拦截alert()函数,会继续弹出alert对话框。默认为false

3.onProgressChanged
表示当前页面的加载速度,我们来看下他的函数:

public void onProgressChanged(WebView view, int newProgress)

WebView view:当前WebView实例
int newProgress:当前的加载进度,值从0到100
这里我们可以显示进度条什么的操作,比如我们以顶部进度条为例:

    webView.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                if (newProgress == 100) {
                    progressBar.setVisibility(View.GONE);
                } else {
                    if (View.INVISIBLE == progressBar.getVisibility()) {
                        progressBar.setVisibility(View.VISIBLE);
                    }
                    progressBar.setProgress(newProgress);
                }
                super.onProgressChanged(view, newProgress);
            }
        });

xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:fitsSystemWindows="true"
    android:layout_height="match_parent"
    >


    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:id="@+id/myProgressBar"
        android:layout_width="match_parent"
        android:layout_height="5px"
        />

    <WebView
        android:layout_below="@id/myProgressBar"
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值