2016-07-16 8 views
2

動作しないヘッダーが設定されていない、私はWebViewの中にページの読み込みにカスタムヘッダーを追加する必要がありますが、それは動作しません:shouldInterceptRequestにWebResourceRequestのヘッダにヘッダを追加することによって、WebViewのにカスタムヘッダーを追加すると、

@Override 
public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request) 
{ 
    request.getRequestHeaders().add("MyHeader","MyValue"); 
    return super.shouldInterceptRequest(view, request); 
} 

私はここで間違っていますか?私はAndroid 5で動作しています。

あなたはHTTPリクエストをしてWebResourceResponseを返さなければならないと言って、多くの答えを見ました。これは私のようにヘッダーを修正しても無視されるからですか?

への呼び出しのAndroidソースコード内の場所を見つけようとしていますshouldInterceptRequestへの呼び出しの場所はどこにありますか、私はそれがどのように動作するか見ることができますが、見つけられませんでした。

+0

はあなたのminSdkVersionがが 'shouldInterceptRequest(WebViewのビュー、WebResourceRequestリクエスト)'バージョン21のみ –

+0

はいから支持されているので、21に設定されています。それは動作するはずですか? –

答えて

4

私は答えを自分で見つけ、それがdocsに権利があります:

戻り値がnullの場合、WebViewのは、いつものように リソースをロードしていきます。それ以外の場合、戻り応答とデータは になります。

また、簡単なテストはWebViewClient.shouldInterceptRequest戻りnullの基本実装を示しています。したがって、WebViewは基本的にいつものようにリソースをロードし続けます。

つまり、ヘッダーに値を追加して使用することはできません。 私は実際にリクエストを自分で行い、レスポンスを返す必要があります。

ヘッダーを変更してデフォルトの実装で使用する方法はありません。

loadUrlメソッドをヘッダーで呼び出すことでヘッダーを設定できますが、最初にローカルページを読み込んでからオンラインページを読み込むと、ヘッダーは使用されません。

+0

私は頭のセットを取得しているだけで、セットに別のアイテムを追加しているので、最初のアプローチは期待できません。実際には新しいセットをリクエストに割り当てているわけではありません。 WebResourceRequestにsetHeadersメソッドがないので、難しい部分は新しいヘッダーセットを割り当てることです。 – Chicowitz

+0

@Chicowitz getRequestHeaders()は、リクエスト内では同じインスタンスであり、コピーではないHashMapインスタンスを返します。要求は同じインスタンスを参照します。つまり、値を追加すると、追加の値はすでに要求に含まれています。あなたは "新しいセット"を割り当てる必要はありません、新しいセットはありません、それは同じセットです。だからこそ、それがうまくいかないわけではありません。あなたはただの問題だけです。 Don Boxは、この答えでうまくいかない理由を正確に述べています。 – Niall

関連する問題