UIWebView 获取请求 URL 路径(html 字符串)

UIWebView get request URL path (html string)

我能够将 HTML 字符串加载到 UIWebView 和从在线资源获得的 CSS 中。我现在的问题是获取被点击的 link 的路径。如果我使用这个:

webView.loadHTMLString(finalHtml, baseURL: baseUrl)

当我在 UIWebViewDelegate shouldStartLoadWithRequestprintln(webView.request?.URL.path) 时,我得到的路径被点击为“/”。

如果我使用这个:

webView.loadHTMLString(finalHtml, baseURL: nil)

当我 println(webView.request?.URL.path)

时,我得到 "nil"

当然,我把baseURL设为原网址,但据我了解,如果link有完整地址,baseURL就无所谓了。

任何专业人士对如何获得被点击的 link 的标签中指示的实际路径有任何建议吗?提前谢谢你=D

编辑 当我长按 link 时,将会弹出一个显示正确 link 的窗口。我已经尝试了所有方法,包括 absoluteString,但我仍然无法获取路径。

看看 Documentation 的 NSURL。

除了路径,还有一个属性 absoluteString,包括host,base URL等

如果 webView.loadHTMLString(finalHTML, baseURL: baseURL)println(webView.request?.URL.path) 在同一个代码块中调用,webView 将不会有非零 request 属性 ,因此您无法获得该请求的 URL 路径。 UIWebView 正在异步加载您的 HTML 字符串。您可以实施 UIWebViewDelegate 以查看何时在您的 UIWebView 中点击 link。使用以下委托方法:

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    if navigationType == .LinkClicked {
        println(request.URL.path)
    }
    return true
}

如果您想查看所有请求的路径,包括向后导航、向前导航等,请省略 if navigationType == .LinkClicked 条件。

所以似乎所有人都没有注意到我在代码中犯了一个愚蠢的错误。我应该使用 request.URL.path 而不是 webView.request?.URL.path。真正让我如此痛苦的小事。所以如果有人像我一样傻,在你的 shouldStartLoadWithRequest 中,使用 request 而不是 webView.request