您的位置:首页 > 移动开发

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

2018-01-02 17:33 836 查看

一、基础设置

//获取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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  webview