我有webView,我加载了一些网址。我需要为该URLRequest设置自定义标头。对于第一个请求,它按预期工作,在服务器端接收标头,并相应地显示内容。但是,如果我从显示的页面打开另一个链接,标题将丢失,请求将在没有标题的情况下发送。
我的幸运猜测是,标头只是第一次添加,每次发送加载网址请求时我都要添加标头。但是,我无法找到方法,我可以这样做。
目前我在viewDidLoad中设置标题
override func viewDidLoad() {
super.viewDidLoad()
myWebView.delegate = self
let url = URL(string: "https://mywebsite.com");
var requestobj = URLRequest(url: url!);
requestobj.addValue("my_request_id", forHTTPHeaderField: "X-Requested-With");
myWebView.loadRequest(requestobj);
}
我是否遗漏了某些内容,或者我是否应该在每个请求的不同位置添加标题?
答案 0 :(得分:1)
是的,每次创建请求时都应添加自定义标头。
答案 1 :(得分:1)
好的,感谢iphonic,指着shouldStartLoadWith。我可以用它来理解请求新的或旧的并通过这样做来解决我的问题:
func webView(_ webView: UIWebView,
shouldStartLoadWith request: URLRequest,
navigationType: UIWebViewNavigationType) -> Bool{
if(navigationType == UIWebViewNavigationType.linkClicked)
{
var req = request;
req.addValue("my_request_id", forHTTPHeaderField: "X-Requested-With");
self.myWebView.loadRequest(req);
return false;
}
else {
return true;
}
}
所以我在这里查看,如果导航类型是clickedLink,那么我不加载当前请求,而是复制它,重新应用自定义标头并将其加载到myWebView中。 如果navigationType没有linkClicked,我继续请求而不做任何更改。