web-dev-qa-db-ja.com

WebviewshouldOverrideUrlLoadingが呼び出されない

EPub形式を使用して本をWebビューにロードする電子ブックリーダーを作成しています。一部の本には、同じ章の一部へのアンカーリンクがあります。各章はhtmlとしてロードされます。リンクは次のようになります

_file:///storage/sdcard0/Android/data/com.abc.reader/files/Download/498935/epub/resources/498935/OEBPS/#footnote-165093-1-backlink
_

shouldOverrideUrlLoading()メソッドを使用してコールバックを取得しようとしましたが、呼び出されません。onPageFinishedのリンクを押すと、_about:blank_として表示されるURLが表示されます。

_reader.setWebViewClient(new WebViewClient() {


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.w("TESTTESTOVERRIDE "+url);
        view.loadUrl(url);
        return false;
    }


    @Override
    public void onPageFinished(WebView view, String url) {
        // after the data has been loaded, the following is executed
        // TODO Auto-generated method stub
        super.onPageFinished(view, url);

            System.out.println("check.... onPageFinishedEntered.."
                    + url.toString());

            view.loadUrl(jsfileloadurl);




    }
_

何か案は?

編集:4.1デバイスではアンカーリンクを正しく取得しますが、4.4または5.0ではabout:blankです。 (どちらの場合もshouldOverrideUrlLoadingは呼び出されません)

8
shine_joseph

私はこれをプログラムでテストしていませんが、OS 4.4以降のWebviewの動作に大きな変更があったため、この問題に直面していると思います。このリンクを確認する必要があります https://developer.Android.com/guide/webapps/migrating.html#URLs

セクション「カスタムURL処理」の下に、無効なURLに対してshouldOverrideUrlLoading()が呼び出されないことが示されています。理想的にはfile://は有効なURLとして扱われるべきですが、ここでは発生していないようです。

考えられる解決策の1つは、メインのWebビューコンテンツにloadDataWithBaseURLをロードし、baseurlをテストURLとして提供することです。 http://mytestap.testurl 、shouldOverrideUrlLoadingが常に呼び出されることが保証されます。次のステップとして、shouldOverrideUrlLoadingコールバックで受信したURLに存在する場合は、プレフィックス ' http://mytestap.testurl 'を削除する必要があります。

10
androgeek

私の場合、POST Webページでのリクエストのために機能しませんでした。 shouldOverrideUrlLoading

注:このメソッドは、POSTリクエストに対しては呼び出されません。

注:このメソッドは、サブフレームおよび非HTTP(S)スキームで呼び出すことができます。このようなURLでWebView#loadUrl(String)を呼び出すと失敗します。

代わりにshouldInterceptRequestをオーバーライドします(一方または両方のバージョン)。 https://medium.com/@madmuc/intercept-all-network-traffic-in-webkit-on-Android-9c56c9262c85 も参照してください。

0
CoolMind

はい。アンドロギーク氏はそれに正しく答えた。 Android OS 4.4(KK)から、shouldOverrideUrlLoading()やshouldInterceptRequest()などのコールバックを実装すると、WebViewは有効なURLに対してのみそれらを呼び出します。カスタムURLを使用していて、制御下にある場合次に、RFC 3986標準に従って、呼び出された上記のメソッドに従う必要があります。RFC3986関連のfile://を確認し、URLを修正してください。

0
Prakhs