WKWebview 在 iOS 中传递自定义 header
WKWebview pass custom header in iOS
我正在使用 WKWebView 加载一些网页。我需要在 WKWebView 中传递一些 header 以更改语言。我已经成功通过,但是在服务器端,它显示其他语言。请问pass的机制是对是错
- (void)viewDidLoad {
[super viewDidLoad];
WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:theConfiguration];
webView.navigationDelegate = self;
NSURL *nsurl=[NSURL URLWithString:@""];
NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
[webView loadRequest:nsrequest];
[self.view addSubview:webView];
}
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
NSLog(@"%@",navigationAction.request.allHTTPHeaderFields);
NSMutableURLRequest *request = [navigationAction.request mutableCopy];
[request setValue:@"sv" forHTTPHeaderField:@"Accept-Language"];
decisionHandler(WKNavigationActionPolicyAllow);
}
你的代码有两个错误:
1) 您定义 header 字段的时间太晚(在 webview 已经开始使用请求加载页面之后)
2) 您将 header 设置在实际请求的可变副本上(因此不在使用的副本上)。一旦方法完成,这个副本就会被释放。
在您的 viewDidLoad
中试试这个:
// ... start as you did
NSURL *nsurl=[NSURL URLWithString:@""]; // I assume you're using a correct URL in your actual code?
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:nsurl];
[request setValue:@"sv" forHTTPHeaderField:@"Accept-Language"];
[self.view addSubview:webView];
[webView loadRequest:nsrequest]; // I just prefer to add to the view hierarchy before I do anything with it, personal preference.
您无需对 webView:decidePolicyForNavigationAction:decisionHandler:
委托方法中的 header 字段执行任何操作。
我正在使用 WKWebView 加载一些网页。我需要在 WKWebView 中传递一些 header 以更改语言。我已经成功通过,但是在服务器端,它显示其他语言。请问pass的机制是对是错
- (void)viewDidLoad {
[super viewDidLoad];
WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:theConfiguration];
webView.navigationDelegate = self;
NSURL *nsurl=[NSURL URLWithString:@""];
NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
[webView loadRequest:nsrequest];
[self.view addSubview:webView];
}
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
NSLog(@"%@",navigationAction.request.allHTTPHeaderFields);
NSMutableURLRequest *request = [navigationAction.request mutableCopy];
[request setValue:@"sv" forHTTPHeaderField:@"Accept-Language"];
decisionHandler(WKNavigationActionPolicyAllow);
}
你的代码有两个错误:
1) 您定义 header 字段的时间太晚(在 webview 已经开始使用请求加载页面之后)
2) 您将 header 设置在实际请求的可变副本上(因此不在使用的副本上)。一旦方法完成,这个副本就会被释放。
在您的 viewDidLoad
中试试这个:
// ... start as you did
NSURL *nsurl=[NSURL URLWithString:@""]; // I assume you're using a correct URL in your actual code?
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:nsurl];
[request setValue:@"sv" forHTTPHeaderField:@"Accept-Language"];
[self.view addSubview:webView];
[webView loadRequest:nsrequest]; // I just prefer to add to the view hierarchy before I do anything with it, personal preference.
您无需对 webView:decidePolicyForNavigationAction:decisionHandler:
委托方法中的 header 字段执行任何操作。