如何在WKWebView

时间:2018-06-15 19:32:57

标签: ios objective-c wkwebview

我知道我通常可以使用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是否来自主框架,并且只为这些框架重新加载。

1 个答案:

答案 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
}