我使用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,以便我可以在服务器端检索它们?
是否有其他解决方案或如何修改现有解决方案?
答案 0 :(得分:3)
实施UIWebViewDelegate
方法webView:shouldStartLoadWithRequest:navigationType:
。
当用户点击webview中的链接时,将调用此委托方法。将request.url
的{{1}}传递给委托方法,并在NSURLRequest
属性后附加NSURLRequest
创建一个新的?apptype=native
。