TL;DR:我有一个iOS(Swift)项目,使用了WKWebView。我想添加一个请求头到所有传出的请求(html,图像,脚本,样式表等)在此WKWebView。我不知道怎么做。
背景:
我有一个Swift iOS应用程序,它使用WKWebView来渲染它的HTML视图。这些视图托管在我们的服务器上,服务器分为生产环境和暂存环境。我已经使用Akamai设置了暂存环境,以便所有传入的请求都必须沿着一个请求标头,以便请求被接受。
问题:
目前,我已经创建了一个WKWebView的子类,它覆盖了loadRequest方法,看起来像这样:
override func loadRequest(request: NSURLRequest) -> WKNavigation? {
guard let mutableRequest = request.mutableCopy() as? NSMutableURLRequest else {
return super.loadRequest(request)
}
if let url = request.URL, host = url.host {
if (host == "staging.example.com") {
mutableRequest.setValue("secret-value", forHTTPHeaderField: "secret-header")
}
}
return super.loadRequest(mutableRequest)
}
这捕获了初始的html请求,它按预期工作。然而,由于该页面依次从同一服务器加载图像,样式表和脚本,因此这些不通过loadRequest方法并被拒绝,因为它们的请求缺少所需的请求头。
要求:
它必须在iOS 8+上与WKWebView一起工作。
2条答案
按热度按时间watbbzwu1#
使用当前的API是不可能的-没有任何点可以处理
WKWebView
发出的所有请求。您可以使用UIWebView
+ custom url protocol(WKWebView
不支持),并将您的头添加到特定服务器的所有请求中。sqserrrh2#
对于未来的任何人来说,这是可能的: