webview里的url重定向无法跳转&使用小结

webview无法重定向。

事因是项目要求引入第三方的h5页面。后台对接好后,返回一个url地址给我。本以为很easy,可是没想到耽误了我好几个小时。。。

服务器返回给我的地址是需要重定向的,但是当我加载url的,一直在loading界面,没有重定向到提供服务公司的url上。尝试了手机上其他的浏览器都是可以的,所以猜想是webview设置的问题。经过排查后发现需要添加这一步:

setting.setDomStorageEnabled(true);//开启DOM storage API功能

这是HTML5 提供的一种标准的接口,主要将键值对存储在本地,在页面加载完毕后可以通过 JavaScript 来操作这些数据。

webview使用小结


在此放上在网上找的比较全的webview的设置吧:

WebSettings配置


1. 获取WebSettings对象


WebSettings webSettings = webView.getSettings();

2. 常用设置方法


(1) 支持js

settings.setJavaScriptEnabled(true);

(2) 设置缓存方式,主要有以下几种:

LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据。

LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据。

LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式。

LOAD_NO_CACHE: 不使用缓存,只从网络获取数据。

LOAD_CACHE_ELSE_NETWORK:只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。

settings.setCacheMode(WebSettings.LOAD_NO_CACHE);

(3) 开启DOM storage API功能(HTML5 提供的一种标准的接口,主要将键值对存储在本地,在页面加载完毕后可以通过 JavaScript 来操作这些数据。)

settings.setDomStorageEnabled(true);

(4) 设置数据库缓存路径

settings.setDatabasePath(cacheDirPath);

(5) 设置Application Caches缓存目录

settings.setAppCachePath(cacheDirPath);

(6) 设置默认编码

settings.setDefaultTextEncodingName(“utf-8”);

(7) 将图片调整到适合webview的大小

settings.setUseWideViewPort(false);

(8) 支持缩放

settings.setSupportZoom(true);

(9) 支持内容重新布局

settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);

(10) 多窗口

settings.supportMultipleWindows();

(11) 设置可以访问文件

settings.setAllowFileAccess(true);

(12) 当webview调用requestFocus时为webview设置节点

settings.setNeedInitialFocus(true);

(13) 设置支持缩放

settings.setBuiltInZoomControls(true);

(14) 支持通过JS打开新窗口

settings.setJavaScriptCanOpenWindowsAutomatically(true);

(15) 缩放至屏幕的大小

settings.setLoadWithOverviewMode(true);

(16) 支持自动加载图片

settings.setLoadsImagesAutomatically(true);

WebViewClient 的回调方法列表


WebViewClient主要用来辅助WebView处理各种通知、请求等事件,通过setWebViewClient方法设置。

(1) 更新历史记录

doUpdateVisitedHistory(WebView view, String url, boolean isReload)

(2) 应用程序重新请求网页数据

onFormResubmission(WebView view, Message dontResend, Message resend)

(3) 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。

onLoadResource(WebView view, String url)

(4) 开始载入页面调用,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。

onPageStarted(WebView view, String url, Bitmap favicon)

(5) 在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关闭loading 条,切换程序动作。

onPageFinished(WebView view, String url)

(6) 报告错误信息

onReceivedError(WebView view, int errorCode, String description, String failingUrl)

(7) 获取返回信息授权请求

onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host,String realm)

(8) 重写此方法可以让webview处理https请求。

onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)

(9) WebView发生改变时调用

onScaleChanged(WebView view, float oldScale, float newScale)

(10) Key事件未被加载时调用

onUnhandledKeyEvent(WebView view, KeyEvent event)

(11) 重写此方法才能够处理在浏览器中的按键事件。

shouldOverrideKeyEvent(WebView view, KeyEvent event)

(12) 在网页跳转时调用,这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。

shouldOverrideUrlLoading(WebView view, String url)

(13) 在加载某个网页的资源的时候多次调用(已过时)

shouldInterceptRequest(WebView view, String url)

(14) 在加载某个网页的资源的时候多次调用

shouldInterceptRequest(WebView view, WebResourceRequest request)

注意:
shouldOverrideUrlLoading 在网页跳转的时候调用,且一般每跳转一次只调用一次。

shouldInterceptRequest 只要是网页加载的过程中均会调用,资源加载的时候都会回调该方法,会多次调用。

WebChoromeClient的回调方法列表


WebChromeClient 主要用来辅助WebView处理Javascript的对话框、网站图标、网站标题以及网页加载进度等。通过WebView的setWebChromeClient()方法设置。

(1) 监听网页加载进度

onProgressChanged(WebView view, int newProgress)

(2) 监听网页标题 : 比如百度页面的标题是“百度一下,你就知道”

onReceivedTitle(WebView view, String title)

(3) 监听网页图标

onReceivedIcon(WebView view, Bitmap icon)

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值