2017-11-05 4 views
0

WebView에서 서버에 사용자 정의 헤더를 보내려고합니다.WebView : 사용자가 webview 링크를 클릭하면 사용자 정의 헤더 추가

내 솔루션은로드 된 첫 페이지에서 제대로 작동하지만 사용자가 webView에서 링크를 클릭하면 작동하지 않습니다.

코드를 준수하십시오.

나는 나의 주인 클래스와 웹보기를 확장하고 몇 가지 방법 오버라이드 :

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에서 모두 사용 :

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

어떻게 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; 
} 
관련 문제