我试图找出一种处理 WebView 后退堆栈的方法,类似于从我自己的应用程序的 WebView 中按下后退按钮时 Android Web 浏览器如何处理它。
问题与Javascript 重定向有关。WebView 后台堆栈似乎包含简单重定向的 URL。这是我的相关代码:
private class ArticleWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK)
{
WebView wv = (WebView)findViewById(R.id.web);
if (wv.canGoBack())
{
wv.goBack();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
如您所见,按下后退按钮会选择堆栈中的前一个 URL,该 URL 在调用 shouldOverrideUrlLoading() 后加载到 WebView 本身中。实际上,我在 shouldOverrideUrlLoading() 内部做了很多与这个特定问题无关的事情,所以“删除我的 WebViewClient 实现”对我不起作用。无论如何,当前一个 URL 是 Javascript 重定向时,该 URL 会加载,然后 Javascript 会立即重定向到 WebView 所在的 URL。我无法禁用 Javascript,因为该网站依赖于它。我也无法更改网站(第三方)。
这个重定向问题的结果对于最终用户来说是一个恶性循环,他们疯狂地向后按压只是为了比 Android 网页处理引擎稍微快一点。
现在这里是有趣的地方:Android Web 浏览器可以很好地处理 Javascript 重定向的后退按钮!它遵循重定向很好,但后退按钮执行用户期望它执行的操作。这意味着可以正确处理这种情况。Android 网络浏览器如何处理这个问题?