Swift - 无法在 Safari 中打开本地文件

Posted

技术标签:

【中文标题】Swift - 无法在 Safari 中打开本地文件【英文标题】:Swift - Unable to open local file in Safari 【发布时间】:2017-12-21 09:38:13 【问题描述】:

我无法使用 Swift 的 openUrl() 函数在 Safari 中打开本地文件,该函数不断返回 false

let url = URL(string:"file:///Users/kiwitech/Library/Developer/CoreSimulator/Devices/FFA6761D-D98B-4C41-ACEF-18249F297897/data/Containers/Data/Application/82EF4E60-F9E9-434B-B86B-0391052D1E6E/Documents/proposals_dataxlsx.xlsx");

print("Local URL",url)
if UIApplication.shared.canOpenURL(url!) 
    if #available(ios 10.0, *) 
        UIApplication.shared.open(url!, options: [:],completionHandler: 
            (success) in
            print("Open  \(success)")
        )
     else 
        UIApplication.shared.openURL(url!)
    

【问题讨论】:

我不确定您是否可以在 Safari 上打开另一个应用程序的本地文件。为什么不在 UIWebView 或 WKWebView 中打开? 【参考方案1】:

要加载文件 url,你应该使用Data(contentsOf: url),但如果你想打开它,你应该使用UIDocumentInteractionController。

【讨论】:

【参考方案2】:

这是正确的。找到 canopenURL: 定义。

返回一个布尔值,指示 URL 的方案是否可以 由设备上安装的某些应用程序处理。

这意味着每当您查询 canOpenURL:(), iOS 将查看是否有任何已安装的应用程序注册了您请求的方案,如果找不到任何东西,那么它将返回 false。

由于返回的 URL 没有附加任何方案,canOpenURL 将返回 false。如果你想在 Safari 中打开一个 URL,它应该以 http:// 或 https:// 开头,这些是为 Safari 注册的方案。

还有一件事是,为了使 canOpenURL(:) 正常工作,您需要将方案列入白名单。您可以在此处找到更多相关信息。 https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl

如果您已经注册了自定义方案,那么当您点击 open(url) 时,相应的应用程序将打开。

还有一件事,永远不要像下面这样硬编码。

let url = URL(string:"file:///Users/kiwitech/Library/Developer/CoreSimulator/Devices/FFA6761D-D98B-4C41-ACEF-18249F297897/data/Containers/Data/Application/82EF4E60-F9E9-434B-B86B-0391052D1E6E/Documents/proposals_dataxlsx.xlsx");

使用 NSSearchPathForDirectoriesInDomains,在目录中创建或搜索文件。

NSString *stringPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"New Folder"];

【讨论】:

以上是关于Swift - 无法在 Safari 中打开本地文件的主要内容,如果未能解决你的问题,请参考以下文章

如何让链接在 iOS 中使用 Xcode/Swift 自动打开 safari 应用程序(不是本地)?

XCODE swift - webview 无法打开 ics 链接 - 在 safari 中有效

WKWebView target="_blank" 链接在 safari ios11,swift 4 中打开新标签

Swift 3 - 在 Safari 中从 JSON 打开 URL

swift:如何打开 Safari 应用程序(不是其中的链接)

如何从 Web 视图打开 Safari 视图控制器(swift)