【发布时间】:2018-06-15 19:32:56
【问题描述】:
我知道我一般可以通过使用 URL 属性来获取 WKWebView 的当前 URL。但是我发现当有重定向时,它不会给我正确的 URL。
例如,如果我转到 http://twitter.com,然后单击指向其他公司的链接(例如:http://mycompany.com),然后我会看到一个 t.co/XXX URL,该 URL 最终将我重定向到 mycompany.com。
但是,当我查看 WKWebView 的 URL 属性时,我看到的是“t.co”而不是“mycompany.com”。
奇怪的是,我从来没有看到 didReceiveServerRedirectForProvisionalNavigation:... 被调用,当我在 didStartProvisionalNavigation:... 和 decisionPolicyForNavigationAction:... 检查 URL 时,我只看到“t.co” URL 而不是“mycompany.com “一个。
另外,我需要知道域才能对正文进行一些调整,所以我不确定我是否可以在这里使用 JS。
如果您有任何想法,请告诉我。
更新:我意识到只有当我使用通过 setURLSchemeHandler 设置的自定义 URL 方案时才会发生这种情况,我最初从问题中省略了它,因为我认为它不相关。
经过一番尝试,我能够通过 willPerformHTTPRedirection:...中的以下更改使事情顺利进行:
NSMutableURLRequest *newRequest =
[NSMutableURLRequest requestWithURL:request.URL];
dispatch_async(dispatch_get_main_queue(), ^{
[_webView loadRequest:newRequest];
});
completionHandler(nil);
更新:这有一个严重的缺点,因为不用于主框架的 URL 将进入 willPerformHTTPRedirection:...,如果为所有这些重新加载请求,页面就会混乱。
我需要一种方法来确定 URL 是否来自主框架,并且只为那些重新加载。
【问题讨论】:
-
你设置了它的委托吗?并在设备上试用。模拟器有时表现得很奇怪
-
你能具体说明一下你的意思吗?我目前正在做 _webView.navigationDelegate = self; _webView.UIDelegate = 自我;我只是在设备上进行测试。
-
webview.navigationDelegate 就足够了。我试过了,效果很好。
-
这是我尝试过的:` if let url = URL(string: "https://t .co/periscopeproducer") { let request = URLRequest(url: url) wkView.load(request ) wkView.navigationDelegate = self } ` func webView(_ webView: WKWebView, didStartProvisionalNavigation 导航: WKNavigation!) { print(webView.url!) } ` func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation 导航: WKNavigation!) { print (webView.url!) } `
-
我认为如果您从 t.co URL 开始,它的行为可能会有所不同。您可以尝试在“twitter.com/microsoft”上启动 WKWebView,然后单击“news.microsoft.com”,这会导致“https://t.co/bKBtZeAFrh”?我的代码与您的代码几乎相同,只是我正在这样做。
标签: ios objective-c wkwebview