TL; DR :我有一个带有WKWebView的iOS(Swift)项目。我想在此WKWebView中向所有传出请求(html,图像,脚本,样式表等)添加请求标头。我无法知道如何做到这一点。
背景
我有一个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一起使用。
答案 0 :(得分:3)
使用当前的API是不可能的 - 没有必要处理WKWebView
发出的所有请求。您可以使用UIWebView
+ custom url protocol(WKWebView
不支持它)并将您的标头添加到特定服务器的所有请求中作为替代。