为啥 UIWebView 不能在 Safari 中打开我的链接?

Posted

技术标签:

【中文标题】为啥 UIWebView 不能在 Safari 中打开我的链接?【英文标题】:Why UIWebView does not open my link in Safari?为什么 UIWebView 不能在 Safari 中打开我的链接? 【发布时间】:2016-07-22 17:07:37 【问题描述】:

我写了这段代码:

    if navigationType == UIWebViewNavigationType.LinkClicked 
        UIApplication.sharedApplication().openURL(request.URL!)
        return false
    

它适用于所有正常的 URL。但是当我用下一个代码点击图片/gif时:

<a href="https://cdn-images-1.medium.com/max/800/1*IR7oti7mEsYunzp_HhcNig.gif" 
target="_blank" class="c" 
style="background-image: url('//cdn.iframe.ly/pj?url=https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1*IR7oti7mEsYunzp_HhcNig.gif&amp;width=1280&amp;
key=9b0e65e32a5412cf736c430972d914c33f46250b&amp;cache=temp');">
1*IR7oti7mEsYunzp_HhcNig.gif </a>

它会在我的应用程序中的 UIWebView 中打开这个 gif/URL。

如何强制它在 Safari 中也打开该 gif/URL?

【问题讨论】:

你确定链接的结果是LinkClicked导航类型吗?我会尝试打印出 navigationType - print("\(navigationType)") 以确保它是预期值。 @DylanS 它打印Navigation type: UIWebViewNavigationType =/ print("\(navigationType == UIWebViewNavigationType.LinkClicked)") 只是打印类型,而不是值。 @DylanS 我得到错误值 =/ 你的问题。只需在该方法中放置一个断点,然后使用调试器检查navigationType。弄清楚它应该是什么,并更新您的代码以允许该导航类型。 【参考方案1】:

必须在代码的其他地方破坏某些东西。 像这样工作正常:

import UIKit

class ViewController: UIViewController, UIWebViewDelegate 

@IBOutlet var webView : UIWebView?

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.webView?.loadhtmlString("<a href='https://cdn-images-1.medium.com/max/800/1*IR7oti7mEsYunzp_HhcNig.gif' target='_blank' class='c' style='background-image: url('//cdn.iframe.ly/pj?url=https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1*IR7oti7mEsYunzp_HhcNig.gif&amp;width=1280&amp; key=9b0e65e32a5412cf736c430972d914c33f46250b&amp;cache=temp');'> 1*IR7oti7mEsYunzp_HhcNig.gif </a>", baseURL: NSURL(string: "testurl.com"))


func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool 
        if navigationType == UIWebViewNavigationType.LinkClicked 
            UIApplication.sharedApplication().openURL(request.URL!)
            return false

        

    return true


【讨论】:

我的导航类型打印Navigation type: UIWebViewNavigationType。我认为这是一个问题

以上是关于为啥 UIWebView 不能在 Safari 中打开我的链接?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 UIWebView 不能正确滚动?

在 UIWebView 中作为 Safari 打开网站?

当我单击 UIWebView 时,如何在 Safari 中打开链接?

UIWebView在Safari中打开链接

UIWebView 在 Safari 中启动

如何使用 Safari 应用程序在 UIWebView 中启动链接?