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
は呼び出されません)
私はこれをプログラムでテストしていませんが、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 'を削除する必要があります。
私の場合、POST Webページでのリクエストのために機能しませんでした。 shouldOverrideUrlLoading :
注:このメソッドは、POSTリクエストに対しては呼び出されません。
注:このメソッドは、サブフレームおよび非HTTP(S)スキームで呼び出すことができます。このようなURLでWebView#loadUrl(String)を呼び出すと失敗します。
代わりにshouldInterceptRequest
をオーバーライドします(一方または両方のバージョン)。 https://medium.com/@madmuc/intercept-all-network-traffic-in-webkit-on-Android-9c56c9262c85 も参照してください。
はい。アンドロギーク氏はそれに正しく答えた。 Android OS 4.4(KK)から、shouldOverrideUrlLoading()やshouldInterceptRequest()などのコールバックを実装すると、WebViewは有効なURLに対してのみそれらを呼び出します。カスタムURLを使用していて、制御下にある場合次に、RFC 3986標準に従って、呼び出された上記のメソッドに従う必要があります。RFC3986関連のfile://を確認し、URLを修正してください。