在 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 中的链接时,会调用此委托方法。将NSURLRequestrequest.url 传递到委托方法中,并创建一个新的NSURLRequest,并将?apptype=native 附加到request.url 属性。

【讨论】:

我尝试了这个解决方案,但它对我不起作用。你们是怎么做到的?

以上是关于在 UIWebView 中加载请求之前修改 URL的主要内容,如果未能解决你的问题,请参考以下文章

URL 不会在 UIWebView 中加载,但会加载到 safari 浏览器中

如何在Swift中的UIWebView中加载URL?

url 未在 UIWebView 中加载

在情节提要中加载 UIWebView 时出错

在 uipopover 中加载 uiwebview

UIWebView 未在 ios 中加载