2017-11-05 3 views
0

Ich möchte benutzerdefinierte Header von WebView zum Server senden.WebView: Fügen Sie benutzerdefinierte Header hinzu, wenn Benutzer auf Webview-Links klicken

Meine Lösung funktioniert gut für die erste Seite geladen, funktioniert aber nicht, wenn Benutzer auf Link in WebView klicken.

Nach dem Code.

I erweitert WebView mit meinem Besitzer Klasse und overrided einige Methoden:

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; 
    } 
} 

ich auch WebViewClient erweitert

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); 
    } 
} 

Und ich beide in MainActivity: can

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); 
    } 
    ... 
} 

Wie Ich sende meine benutzerdefinierten Header an jeden Request, selbst wenn ich Benutzer auf einen Link in WebView klicke?

+0

Vielleicht fand ich den Grund dafür, dass in diesem Beitrag erklärt https://stackoverflow.com/questions/38412965 – fciri

Antwort

1

Ich löste die Zugabe in WebViewClient diese Methoden:

@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; 
} 
Verwandte Themen