【问题标题】:Swift - Modify NSURLRequest in UIWebViewSwift - 在 UIWebView 中修改 NSURLRequest
【发布时间】:2015-08-29 11:10:57
【问题描述】:

我创建了一个 UIWebView,我在 url 中附加了一个参数:

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

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

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

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

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

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

问候和感谢!

【问题讨论】:

  • 是否可以附加参数?

标签: swift url parameters uiwebview nsurlrequest


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2015-12-11
    • 2015-12-25
    相关资源
    最近更新 更多