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

问题描述 投票:1回答:2

我无法使用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!)
    }
}
ios swift safari openurl
2个回答
1
投票

文件网址应与Data(contentsOf: url)一起使用,但如果要打开它,则应改用this


0
投票

这是正确的。找到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"];
    
© www.soinside.com 2019 - 2024. All rights reserved.