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に送信しますか?
たぶん私はhttps://stackoverflow.com/questions/38412965この記事で説明された理由を見つけました – fciri