向 WKWebView 中的所有传出请求添加请求 header
Add request header to ALL outgoing requests within a WKWebView
TL;DR:我有一个带有 WKWebView 的 iOS (Swift) 项目。我想向此 WKWebView 中的所有传出请求(html、图像、脚本、样式表等)添加一个请求 header。我不知道该怎么做。
背景:
我有一个 Swift iOS 应用程序,它使用 WKWebView 来呈现它的 html 视图。这些视图托管在我们的服务器上,服务器分为生产环境和暂存环境。我已经使用 Akamai 设置了暂存环境,以便所有传入请求都必须传递一个请求 header 以便请求被接受。
问题:
目前,我已经创建了一个 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 方法并被拒绝,因为它们的请求缺少此必需的请求 header.
要求:
它必须在 iOS 8+.
上与 WKWebView 一起使用
当前 API 不可能 - 您无法处理 WKWebView
发出的所有请求。您可以使用 UIWebView
+ custom url protocol(WKWebView
不支持)并将您的 header 添加到特定服务器的所有请求中作为替代。
TL;DR:我有一个带有 WKWebView 的 iOS (Swift) 项目。我想向此 WKWebView 中的所有传出请求(html、图像、脚本、样式表等)添加一个请求 header。我不知道该怎么做。
背景:
我有一个 Swift iOS 应用程序,它使用 WKWebView 来呈现它的 html 视图。这些视图托管在我们的服务器上,服务器分为生产环境和暂存环境。我已经使用 Akamai 设置了暂存环境,以便所有传入请求都必须传递一个请求 header 以便请求被接受。
问题:
目前,我已经创建了一个 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 方法并被拒绝,因为它们的请求缺少此必需的请求 header.
要求:
它必须在 iOS 8+.
当前 API 不可能 - 您无法处理 WKWebView
发出的所有请求。您可以使用 UIWebView
+ custom url protocol(WKWebView
不支持)并将您的 header 添加到特定服务器的所有请求中作为替代。