【问题标题】:Swift - Unable to open local file in SafariSwift - 无法在 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 中打开?

标签: ios swift safari openurl


【解决方案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"];
    

    【讨论】:

      猜你喜欢
      • 2017-01-10
      • 2017-06-05
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 2015-04-18
      • 2013-12-05
      相关资源
      最近更新 更多