0

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 関数を呼び出してブール値の戻り値を取得するにはどうすればよいでしょうか?

よろしくお願いします。

4

0 に答える 0