在UIWebView中加载请求之前修改URL

时间:2015-08-27 15:45:48

标签: ios swift url cookies uiwebview

我使用UIWebView从我的网络应用创建了一个原生应用。

我的webapp是一个基本的CMS,包含一些静态页面,一些类别页面和一些详细页面。

现在我需要检查请求是来自网络应用还是原生应用。

要做到这一点,我有两种可能性:

第一个解决方案:修改URL并检查服务器端的URL:

@IBOutlet var WebView: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    loadWebPage()
}

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

当我在服务器端检查该参数是否存在于第一页时,但是当我切换到其他页面(类别等)时,条件失败。

第二个解决方案:我尝试设置Cookie:

@IBOutlet var WebView: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    loadWebPage()
}

func loadWebPage() {
    let url = NSURL(string: "http://localhost:8888")
    let request = NSURLRequest(URL: url!)

    var cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies as! [NSHTTPCookie]

    var reqCookies:[AnyObject] = []

    for aCookie in cookies {

        reqCookies += [aCookie]

    }

    var headers = NSHTTPCookie.requestHeaderFieldsWithCookies(reqCookies)

    WebView.loadRequest(request)
}

但是如何在响应中添加此示例中的cookie,以便我可以在服务器端检索它们?

是否有其他解决方案或如何修改现有解决方案?

1 个答案:

答案 0 :(得分:3)

实施UIWebViewDelegate方法webView:shouldStartLoadWithRequest:navigationType:

当用户点击webview中的链接时,将调用此委托方法。将request.url的{​​{1}}传递给委托方法,并在NSURLRequest属性后附加NSURLRequest创建一个新的?apptype=native