检查 URL 是不是与 UIWebView 的请求或 WKWebView 的 navigationAction.request 相等
Posted
技术标签:
【中文标题】检查 URL 是不是与 UIWebView 的请求或 WKWebView 的 navigationAction.request 相等【英文标题】:Check for equality of an URL with UIWebView's request or WKWebView's navigationAction.request检查 URL 是否与 UIWebView 的请求或 WKWebView 的 navigationAction.request 相等 【发布时间】:2018-07-20 04:31:16 【问题描述】:我们希望从受控的 URL 列表中加载 UIWebView(或 WKWebView)内容。我们想确保没有可能的网络导航。我们想到了webView:shouldStartLoadWith:navigationType:
,但来自webView 的request.url
在URL 的主机后面附加了一个斜杠,因此不适合直接比较。
我们要加载的不同 URL 示例:
// example 1
let url = URL(string: "https://example.com/foo/")!
// example 2
let url = URL(string: "https://example.com/foo")!
// example 3
let url = URL(string: "https://example.com")!
我们如何加载请求:
webView.loadRequest(URLRequest(url: url))
我们如何控制请求:
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool
return request.url == url
第一个例子有效,因为request.url
确实等于https://example.com/foo/
。
第二个例子有效,因为request.url
确实等于https://example.com/foo
。
但第三个示例失败了,因为 request.url
现在是 https://example.com/
而不是 https://example.com
为了支持正确的比较,如何像 UIWebView 一样规范化 URL?
【问题讨论】:
在shouldStartLoadWith
中尝试webView.url
?
@Jack webView.url
不存在:“'UIWebView' 类型的值没有成员'url'”
仅供参考:UIWebView
已弃用。你应该改用WKWebView
@MichaelHulet 完成,但同样的问题,啊啊。
【参考方案1】:
一种解决方法是您可以获取 URL 的 absoluteString
属性并删除最后一个元素(如果它是 '/' 并进行比较。
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool
if let url = request.url
var requestUrlArray = url.absoluteString.map String($0)
if let lastElement = requestUrlArray.last, lastElement == "/"
_ = requestUrlArray.popLast()
let requestUrlString = requestUrlArray.joined()
return requestUrlString == url.absoluteString
return false
【讨论】:
【参考方案2】:从您的问题来看,您似乎希望允许 url 具有相同的主机,在这种情况下......
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool
return request.url.host == url.host
【讨论】:
以上是关于检查 URL 是不是与 UIWebView 的请求或 WKWebView 的 navigationAction.request 相等的主要内容,如果未能解决你的问题,请参考以下文章
iOS 如何为每个 UIWebView 请求添加 cookie?
在ios uiwebview objective-c中检查布尔值是yes还是no时出错