自分のアプリの WebView 内から戻るボタンが押されたときに Android Web ブラウザーがそれを処理する方法と同様に、WebView バックスタックを処理する方法を見つけようとしています。
この問題は、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 が選択され、shouldOverrideUrlLoading() が呼び出された後に WebView 自体に読み込まれます。私は実際に shouldOverrideUrlLoading() 内でこの特定の質問に関係のない多くのことを行っているため、「WebViewClient 実装を削除する」は機能しません。とにかく、前の URL が Javascript リダイレクトの場合、その URL が読み込まれ、Javascript はすぐに WebView があった URL にリダイレクトされます。Web サイトが Javascript に依存しているため、Javascript を無効にできません。また、Web サイト (サードパーティ) を変更することもできません。
このリダイレクトの問題の結果は、Android Web ページ処理エンジンよりもわずかに高速であることだけを必死に要求しているエンドユーザーにとって悪循環です。
ここからが興味深いところです。Android Web ブラウザーは、Javascript リダイレクトの戻るボタンを問題なく処理します。リダイレクトには問題なく従いますが、戻るボタンはユーザーが期待することを行います。つまり、このシナリオを正しく処理できるということです。Android Web ブラウザはこの問題をどのように処理しますか?