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>
相关文章推荐
- iOS WebView 如何通过js获取网页中所有图片并加入点击事件,实现浏览图片的功能
- 云飞的获取webview视频点击事件方法
- iOS WKWebView ios9以上版本配置 与 设置UserAgent(用户代理), 解决点击web, 客户端接收不到web事件问题
- 调用js代码获取webView页面中的所有图片及点击事件
- React Native WebView 内点击事件获取onNavigationStateChange、onMessage
- Android在WebView中给图片设置点击事件
- 获取TextView中的url并设置点击事件
- 利用CMHTMLView实现webview基础功能,同时获取点击图片链接的功能
- iOS 与HTML5交互之捕捉HTML5按钮点击事件,获取webview上按钮的点击事件
- Android 给view 设置setSystemUiVisibility 之后,每次点击事件监听不到
- WebView 获取网页点击事件
- webview 获取html中所有的图片资源并给图片添加点击事件
- React Native WebView 内点击事件获取onNavigationStateChange、onMessage
- Android RecyclerView ListView 获取不到Item点击事件
- 进击的KFC:iOS WebView 如何通过js获取网页中所有图片并加入点击事件,实现浏览图片的功能
- web view的图片添加点击事件,和获取所有图片链接
- iOS 与HTML5交互之捕捉HTML5按钮点击事件,获取webview上按钮的点击事件
- RecyclerView设置Item点击事件
- webView里面图片的点击事件
- 求助: Android 加载 webview, 点击webview 中网页时间, 如何触发 Android 事件