WKWebview 注入header

2021年6月11日更新

header请求头这种最好是不通过服务器,比如如果通过服务器NGINX配置,会出现很多问题,包括请求头丢失,请求头拦截,最好的方式通过直接跟web直接交互,比如WebViewJavascriptBridge或者原生自带的方式做交互,更方便,如果有更好的方案留言给我,阿里嘎多

最近在项目中遇到与H5交互,当时方案是在请求头中加入header,但是后面遇到了比如浏览器缓存header不更新,可以设置请求头中加入Cache-Control nocache 等字段或者在链接中加入时间戳防止缓存,后者方案可能相对来说不是很好。

在WKwebview因为加载请求是个异步操作,所以在初次webview loadrequest时候不需要加入header ,而是拦截webview的请求 ,在请求头中加入header,并且重复请求,但是还有一定问题 ,有时会有header丢失问题,所以我觉得最优解决方案是通过交互传参数可以解决这个问题,如果有更好方案请告诉我。

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
    NSURLRequest * request =  navigationAction.request;
    NSMutableURLRequest * mutRequest = [request mutableCopy];
    NSString * urlString = request.URL.absoluteString;
    NSDictionary * dictHader = request.allHTTPHeaderFields;
    if (![dictHader objectForKey:@"token"]) {
        [mutRequest setValue:@"123" forHTTPHeaderField:@"token"];
        [webView loadRequest:mutRequest];
        decisionHandler(WKNavigationActionPolicyAllow);
    }else{
        decisionHandler(WKNavigationActionPolicyAllow);

    }
   NSLog(@"====== >>>>url----- %@ request %@",urlString,[request allHTTPHeaderFields]);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。