2016-06-15 24 views
6

webviewのリクエストにカスタムヘッダーを追加します。私はそれがshouldInterceptRequestでそれを行うことができるはずだと思う..私の最小APIレベルは21 shouldInterceptRequest(最終的なWebViewのビュー、最終的な文字列のURL)未満でもあるので、私もここでヘッダーを追加する必要がありますが、どうやって。shouldInterceptRequestのすべてのリクエストにカスタムヘッダーを追加するAndroid webview

@Override 
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      request.getRequestHeaders().put("ClientId", "ANDROID"); 
      request.getRequestHeaders().put("Tokon", token); 
     } 

     return super.shouldInterceptRequest(view, request); 
    } 

    @Override 
    public WebResourceResponse shouldInterceptRequest(final WebView view, final String url) { 
     // I need to updated the header here 

     return super.shouldInterceptRequest(view, url); 
    } 

view.loadUrl(url、headers)を使用することをお勧めしますが、これはどちらでも動作しません。

答えて

0

pre API 21で問題が発生するのは、shouldInterceptRequestがリクエストの本文なしでインターセプトされたURLとwebviewのみを提供することです。私はこの同じ問題に遭遇し、このプロジェクトの重要な部分は、資産フォルダにinterceptheader.htmlある以下のGitHubリポジトリ

https://github.com/KeejOow/android-post-webview

を発見しました。このhtmlには、webviewが読み込むすべてのHTML応答の先頭に挿入されるjavascriptが含まれています。このJSは、ページからのすべてのフォームとAjaxの送信を傍受し、本文データをJavaクラスにロードします。次に、shouldInterceptRequestメソッドは、本体にデータがあるかどうかに基づいてリクエストがPOSTかGET(これらの2つしか取得できない、残念ながら)かどうかを判断します。

最後に、すべての関連情報をマーシャリングしたら、それを(Androidに渡す代わりに)単独で実行し、結果のWebResourceResponseを返します。

リポジトリにエージングが発生していることに注意してください。私は彼らが欲しいと思うようにページを動かすために少しの手間をかけなければならなかった。

ヘッダーを追加する最適な場所は、shouldInterceptRequestの下のInterceptingWebViewClientクラスです。

conn.setRequestProperty("header-name", value); 
関連する問題