Web アプリをカプセル化することになっている Android アプリで作業するのに大きな問題があり、StackOverflow が私の唯一の希望であると考えています。
最初の問題は次のとおりです。「About」リンクのクリックをインターセプトして、すべてのアプリの標準の About ビューでアクティビティを起動する必要がありました。残念ながら、ページ上のリンクをクリックすると、コンテンツは AJAX によって読み込まれ、shouldOverrideUrlLoading(String url)
呼び出されません。
私の回避策は、Android の JavaScript インターフェイスを使用してオブジェクトを JS に渡し、次のようにそのオブジェクトへの読み込み URL を配置することでした。
private class JavaScriptInterface {
@SuppressWarnings("unused")
public boolean shouldOverrideUrlLoading(String url) {
if (url.endsWith("about")) {
startActivity(new Intent("foo.bar.ABOUT"));
return true;
}
return false;
}
}
これは完全に機能しており、非常に醜い回避策のようには見えません。
2 つ目の問題は、Android 2.1 (電話とエミュレーター) では、WebView が AJAX で読み込まれた URL を履歴に保存しないため、次のコードを使用して戻るキーをオーバーライドしても、戻るキーを押すと常にアプリが終了することです。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
奇妙なことに、これは Android >2.1 のすべてのバージョンで完全に機能します。回避策はありますか?
履歴をさかのぼれるかどうかを知るために JS 関数を呼び出すことを考えていましたが、Android から JS 関数を呼び出してブール値の戻り値を取得するにはどうすればよいでしょうか?
よろしくお願いします。