Swift - 在UIWebView中修改NSURLRequest

时间:2015-08-29 11:10:58

标签: swift url parameters uiwebview nsurlrequest

我创建了一个UIWebView,其中我将一个参数添加到url:

    let url = NSURL(string: "http://localhost:8888/?apptype=native")
    let request = NSURLRequest(URL: url!)
    WebView.loadRequest(request)

当我在UIWebView中加载第一页时,参数存在,我可以使用php获取它。

但是当我切换到另一个页面时,参数消失了,我无法在服务器端使用php从网址获取它。

所以我找到了这个委托方法:

func webView(WebViewNews: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    return true
}

但是,每当在UIWebView中加载新页面时,我如何附加参数?

问候和谢谢!

1 个答案:

答案 0 :(得分:0)

您可以返回false,然后使用NSURLSession(或NSURLConnection)自行检索内容,然后通过调用其loadData:MIMEType:textEncodingName:baseURL:方法将页面注入Web视图。

此方法仅适用于页面加载,不适用于页面加载的其他资源(CSS,JavaScript等)。

要获得更完整的方法,您可以编写自定义NSURLProtocol类。只要您在全局注册该协议,此方法应适用于UIWebView类。您可能必须在创建Web视图之前注册协议类。

在您的自定义协议中,当您被要求启动连接时,您首先会创建一个可变的请求副本,并以您想要修改它的任何方式对其进行修改。然后,通过调用setProperty:forKey:inRequest:以自定义方式标记请求,最后,使用NSURLConnection或NSURLSession重新发出请求。

在您的canInitWithRequest:方法中,检查请求是否已被标记,如果是,则返回NO,以便正常的HTTP / HTTPS协议类将处理请求。