Android WebView 内处理302重定向
Posted 滕玉坤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android WebView 内处理302重定向相关的知识,希望对你有一定的参考价值。
感谢这篇博文帮我解决了问题:http://qbeenslee.com/article/android-webview-302-redirect/
核心思想:通过记录访问历史url,在返回时候对url进行过滤出来。
public class NewsDetailActivity extends AppCompatActivity
private WebViewWithProgress myWebViewWithProgress;
private WebView myWebView;
private String newsDetailURL;
/**
* 记录URL的栈
* 规则:
* 1.不可在@code WebView.onPageFinished();中开始记录URL
* 2.记录需要屏蔽重定向URL
* */
private final Stack<String> mUrls=new Stack<>();
/**
* 判断页面是否加载完成
* */
private boolean mIsloading=false;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news_detail);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
Toolbar toolbar = (Toolbar) findViewById(R.id.detail_toolbar);
setSupportActionBar(toolbar);
// Show the Up button in the action bar.
ActionBar actionBar = getSupportActionBar();
if (actionBar != null)
actionBar.setDisplayHomeAsUpEnabled(true);
// 查找浏览器控件ID
myWebViewWithProgress = (WebViewWithProgress) findViewById(R.id.MyWebViewContent);
//获取浏览器
myWebView = myWebViewWithProgress.getWebView();
// 设置页面支持javascript
myWebView.getSettings().setJavaScriptEnabled(true);
//缩放开关
//设置此属性,仅支持双击缩放,不支持触摸缩放(android4.0)
myWebView.getSettings().setSupportZoom(true);
// 设置是否可缩放
myWebView.getSettings().setBuiltInZoomControls(true);
//将图片调整到适合WebView的大小
myWebView.getSettings().setUseWideViewPort(true);
myWebView.getSettings().setDomStorageEnabled(true);
myWebView.getSettings().setUseWideViewPort(true);
myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
//设置图片自动加载
myWebView.getSettings().setLoadsImagesAutomatically(true);
newsDetailURL = getIntent().getStringExtra("newsDetailURL");
// 设置WebView监听事件
myWebView.setWebViewClient(new WebViewClient()
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
// TODO Auto-generated method stub
return false;
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
if(mIsloading &&mUrls.size()>0)
mUrls.pop();
recordUrl(url);
super.onPageStarted(view, url, favicon);
@Override
public void onPageFinished(WebView view, String url)
Log.v("FairyDebug", "URL加载完毕" + url);
super.onPageFinished(view, url);
if(mIsloading|| url.startsWith("about:"))
mIsloading=false;
);
Log.v("FairyDebug","--------get---------------"+newsDetailURL);
// 加载URL
myWebView.loadUrl(newsDetailURL);
/**
* 记录非重定向链接 避免刷新页面造成的重复入栈*/
private void recordUrl(String url)
//这里还可以根据自身业务来屏蔽一些链接放入URL栈
if(!TextUtils.isEmpty(url)&& !url.equalsIgnoreCase(getLastPageUrl()))
mUrls.push(url);
/**获取上一页的链接*/
private synchronized String getLastPageUrl()
return mUrls.size()>0 ? mUrls.peek():null;
/**推出上一页链接*/
public String popLastPageUrl()
if(mUrls.size()>=2)
mUrls.pop();// pop current page url
return mUrls.pop();
return null;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
后话:
若没有设置 WebViewClient 则在点击链接之后由系统处理该 url,通常是使用浏览器打开或弹出浏览器选择对话框。
若设置 WebViewClient 且该方法返回 true ,则说明由应用的代码处理该 url,WebView 不处理。
若设置 WebViewClient 且该方法返回 false,则说明由 WebView 处理该 url,即用 WebView 加载该 url。
以上是关于Android WebView 内处理302重定向的主要内容,如果未能解决你的问题,请参考以下文章
从 Chrome 重定向到带有位置标头的 302 后被阻止的 Android 应用