gpt4 book ai didi

java - 网页 View : add custom headers when user click webview links

转载 作者:行者123 更新时间:2023-12-02 12:02:45 27 4
gpt4 key购买 nike

我想从 webView 向服务器发送自定义 header 。

我的解决方案对于加载的第一个页面运行良好,但如果用户单击 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;
}
}

我还扩展了 WebViewClient

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

我在 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 上的链接,如何将自定义 header 发送到每个请求?

最佳答案

我解决了在 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;
}

关于java - 网页 View : add custom headers when user click webview links,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47126733/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com