我知道我通常可以使用URL属性获取WKWebView的当前URL。但是我发现当有重定向时,它不会给我正确的URL。
例如,如果我转到http://twitter.com然后点击指向其他公司的链接(例如:http://mycompany.com),那么我会看到一个t.co/XXX网址,最终会将我重定向到mycompany.com。
但是,当我查看WKWebView的URL属性时,我看到的是“t.co”而不是“mycompany.com”。
奇怪的是,我从来没有看到didReceiveServerRedirectForProvisionalNavigation:...调用,当我在didStartProvisionalNavigation上检查URL时:...和decisionPolicyForNavigationAction:...我只看到“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是否来自主框架,并且只为这些框架重新加载。
答案 0 :(得分:1)
好吧,所以我做到了。 Even Bus
解决方案是取消导航并使用loadRequest再次加载请求:
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
if navigationAction.targetFrame?.isMainFrame != true {
webView.load(navigationAction.request)
}
return nil
}