在 UIWebView 中加载请求之前修改 URL
Posted
技术标签:
【中文标题】在 UIWebView 中加载请求之前修改 URL【英文标题】:Modify URL Before Loading Request in UIWebView 【发布时间】:2015-08-27 15:45:48 【问题描述】:我使用 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)
当我在服务器端检查参数是否存在于第一页时它可以工作,但是当我切换到其他页面(类别等)时,条件失败。
第二种解决方法:我尝试设置cookies:
@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】:实现UIWebViewDelegate
方法webView:shouldStartLoadWithRequest:navigationType:
。
当用户点击 webview 中的链接时,会调用此委托方法。将NSURLRequest
的request.url
传递到委托方法中,并创建一个新的NSURLRequest
,并将?apptype=native
附加到request.url
属性。
【讨论】:
我尝试了这个解决方案,但它对我不起作用。你们是怎么做到的?以上是关于在 UIWebView 中加载请求之前修改 URL的主要内容,如果未能解决你的问题,请参考以下文章