我正在使用WKWebView,当用户执行导致WKWebView转到另一个URL的内容时(例如,单击WKWebView中导致另一个URL的按钮),我需要执行一些代码。我试图通过比较工作网址和原始网址来做到这一点,但是一些重定向并不是我的用户而是网站本身。反正有区别吗?这就是我现在所拥有的:
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
print(webView.url?.absoluteString)
if webView.url?.absoluteString != self.workingReult {
//do something
}
}
由于
答案 0 :(得分:1)
确定。这是我对Swift 4的解决方案。
一旦为WKWebView设置了navigationDelegate,就可以实现以下功能,该功能在Web视图导航时随时调用:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if navigationAction.navigationType == .linkActivated {
//Tap on href link case
decisionHandler(WKNavigationActionPolicy.cancel)
} else {
//Any other case
decisionHandler(WKNavigationActionPolicy.allow)
}
}
如您所见,您可以使用 navigationAction.navigationType 获取导航操作的触发器。就我而言,我阻止用户浏览链接,但是您可以根据需要对其进行自定义。
请记住,在任何情况下都必须包含DecisionHandler。
您可以检查其余的WKNavigationType常量案例here
答案 1 :(得分:0)
你可以使用其中任何一个,
func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
let currentURL : NSString = (webView.URL!.host)!
//print("The current String is\(currentURL)")
if currentURL.containsString("test.com")
{
//handle your actions here
}
print("finish to load")
}
或者您可以使用此比较您的网址
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
let app = UIApplication.sharedApplication()
let url = navigationAction.request.URL
//handle your events from here
}
答案 2 :(得分:0)
要查看重定向URL,请像这样检查来自navigationAction
而不是webview.url
的URL。
override internal func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
super.webView(webView, decidePolicyFor: navigationAction, decisionHandler: decisionHandler)
let request = navigationAction.request
if let url = request.url {
//here you can compare your url
}
}