【发布时间】:2021-04-23 10:23:10
【问题描述】:
我在 macOS 中有一个简单的WKWebView。访问没有 www 的页面然后重定向到子域 www 时,我遇到了重定向问题。
据我所知,我只需要允许导航请求,webView 应该自己处理所有事情。但重定向从未真正发生过。 webView 最终进入重定向循环,一遍又一遍地调用didReceiveServerRedirectForProvisionalNavigation:,直到最终以Error Domain=NSURLErrorDomain Code=-1007 "too many HTTP redirects" 失败
Safari,其他浏览器和客户端确实成功了,这让我相信这不是服务器问题。 此外,当我直接输入重定向到的地址时,它确实可以正常工作。
我实现WKNavigationDelegate协议如下:
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
if ([navigationAction navigationType] == WKNavigationTypeOther) {
if ([[[[navigationAction request] URL] host] isEqualToString:[[[self webView] URL] host]]) {
decisionHandler(WKNavigationActionPolicyAllow);
NSLog(@"allowed");
return;
}
decisionHandler(WKNavigationActionPolicyCancel);
NSLog(@"cancelled: %@", [navigationAction request]);
}
else {
decisionHandler(WKNavigationActionPolicyAllow);
}
}
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
NSLog(@"provisional navigation started");
}
- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation; {
NSLog(@"provisional navigation received redirect");
}
在我使用WKNavigationActionPolicyAllow 回答后,我希望 webView 接受并实际遵循重定向。
当我执行请求时,会发生以下情况:
- decidePolicyForNavigationAction:用于主域名
- 我回复允许
- didStartProvisionalNavigation:
- decidePolicyForNavigationAction:用于子域重定向
- 我回复允许
- didReceiveServerRedirectForProvisionalNavigation:
- 回到 6。
我必须以某种方式“提交”重定向还是自己手动执行? 有什么想法还是我完全错过了什么?
【问题讨论】:
标签: objective-c macos webkit wkwebview http-redirect