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