【问题标题】:Why do "_blank" links open inside my app, and the others open inside the webview?为什么“_blank”链接在我的应用程序中打开,而其他链接在 webview 中打开?
【发布时间】:2016-03-01 13:56:25
【问题描述】:

我有一个基本的测试应用程序。 它包含一个 UIWebView。

该网站包含带有 target="_blank" 的链接和一些没有它的链接。 问题是发生的情况正好相反,“_blank”在应用程序内部打开,而其他在 Safari 中打开。

我的视图控制器包含这个:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        [[UIApplication sharedApplication] openURL:request.URL];
        return false;
    }
    return true;
}

怎么可能? 谢谢

【问题讨论】:

  • 当您单击 _blank 链接时,navigationType 是什么?什么是 request.URL
  • @LouFranco 感谢您的评论,但我不明白您的问题。你能说得更具体点吗?
  • 在你的代码中,在if这一行放一个断点,看看navigationType的值是多少。根据下面的答案,它将是其他,而不是 LinkClicked。他提出了一些建议

标签: ios objective-c uiwebview


【解决方案1】:

您自己实现了此行为。当您收到UIWebViewNavigationTypeLinkClicked 时,表示点击了任何链接,而不仅仅是target="_blank" 的链接。对于这种情况,您调用 -[UIApplication openURL:],因此,您在 Safari 中打开任何链接。

当目标为“_blank”时,您将收到与UIWebViewNavigationTypeOther 相同的委托方法。对于这种情况,您返回 true,因此链接在 Web 视图中打开。这里的问题是,没有简单的方法可以将此案例与许多“其他”案例区分开来。 UIWebView API 远非完美。我建议切换到WKWebView

有关此功能的基于UIWebView 的实现的详细信息,请参阅此问题Open target="_blank" links outside of UIWebView in Safari

UPD:再次检查。对于target="_blank" 的情况,我收到了两个后续的shouldStartLoadWithRequest: 电话,第一个是UIWebViewNavigationTypeLinkClicked,第二个是UIWebViewNavigationTypeOther。因此,在我的情况下,所有在 Safari 中打开的链接都带有来自问题的代码。在 iOS 9.1 和 iOS 8.4 上进行了检查。

【讨论】:

  • 非常感谢,但我还是不明白目标空白是如何在 webView 中打开的,而其他的则不是,这是什么原因?
  • 谢谢,但是,您仍然说“没有简单的方法可以将此案例与许多“其他”案例区分开来”,那么系统有何不同,并且与我想要的相反(而在这两种情况下,navigationType = UIWebView...LinkClicked)?
猜你喜欢
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多