2017-11-05 14 views
0

webViewからカスタムヘッダーをサーバーに送信します。WebView:ユーザーがwebviewリンクをクリックしたときにカスタムヘッダーを追加します。

私のソリューションは読み込まれた最初のページで正常に動作しますが、ユーザーがwebViewのリンクをクリックしても機能しません。

コードに続いて。

私は、所有者のクラスでのWebViewを拡張し、いくつかのメソッドをオーバーライド:

public class MainActivity extends AppCompatActivity implements DrawerMenuItem.DrawerCallBack{ 

    @BindView(R.id.main_webview) SMWebView webView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ... 
     webView.setWebViewClient(new SMWebViewClient()); 
     webView.clearCache(true); 
     webView.clearHistory(); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
     webView.loadUrl(Constant.baseUrl + Constant.homeUrl); 
    } 
    ... 
} 

どのようにすることができます

public class SMWebView extends WebView { 

private final static HashMap<String,String> httpHeaders = new HashMap<>(); 

... 

    @Override 
    public void loadUrl(String url) { 
     super.loadUrl(url,httpHeaders); 
    } 

    @Override 
    public void loadUrl(String url, Map<String, String> additionalHttpHeaders) { 
     if(additionalHttpHeaders!=null) { 
      additionalHttpHeaders.putAll(httpHeaders); 
      super.loadUrl(url, additionalHttpHeaders); 
     } 
     else{ 
      super.loadUrl(url, httpHeaders); 
     } 
    } 

    public HashMap<String,String> getHttpHeaders(){ 
     return httpHeaders; 
    } 
} 

は、私はまた、

public class SMWebViewClient extends WebViewClient { 

    @Override 
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 
     android.util.Log.i("MyWebViewClient", "attempting to load resource: " + request.getUrl()); 

     if(view.getClass().equals(SMWebView.class)){ 
      SMWebView smWebView = (SMWebView) view; 
      request.getRequestHeaders().putAll(smWebView.getHttpHeaders()); 
      request.getRequestHeaders().put("HIDE_MENU","true"); 
     } 

     return super.shouldInterceptRequest(view,request); 
    } 
} 

をWebViewClientそして、私はMainActivityの両方を使用して拡張webView上のリンクをクリックしても、私は自分のカスタムヘッダを各reqeustに送信しますか?

+0

たぶん私はhttps://stackoverflow.com/questions/38412965この記事で説明された理由を見つけました – fciri

答えて

1

私はWebViewClientにこのメソッドを追加解く:

@Override 
public boolean shouldOverrideUrlLoading(WebView view,WebResourceRequest request) { 
    view.loadUrl(request.getUrl().toString()); 
    return true; 
} 

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String uri) { 
    view.loadUrl(uri); 
    return true; 
} 
関連する問題