2016-09-16 262 views
3

TL; DR:我有一个带有WKWebView的iOS(Swift)项目。我想在此WKWebView中向所有传出请求(html,图像,脚本,样式表等)添加请求标头。我无法找到如何做到这一点。向WKWebView中的所有传出请求添加请求标头

背景:
我有它使用WKWebView来呈现它的HTML视图的雨燕的iOS应用程序。这些视图托管在我们的服务器上,这些服务器分为生产环境和临时环境。我使用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

使用当前的API是不可能的 - 您无法处理由WKWebView所做的所有请求。您可以使用UIWebView + custom url protocolWKWebView不支持它),并将头添加到某个服务器的所有请求中作为替代。

+0

无赖。谢谢你的回答! – Alexander