wkwebview 文件服务器,WKWebView无法在iOS 8下加载本地文件

这篇博客介绍了如何解决在iOS8中WKWebView加载本地文件出现的错误。作者提供了一个20行的Swift代码片段,通过创建临时目录并复制文件到该目录来规避问题,使得在iOS9及更高版本上可以正常加载。此外,还提供了在iOS8上使用SafariViewController的替代方案。
摘要由CSDN通过智能技术生成

他们终于解决了这个错误!现在我们可以使用了-[WKWebView loadFileURL:allowingReadAccessToURL:]。显然,这个修复在WWDC 2015视频中值得花几秒钟。介绍Safari View Controller

适用于iOS8~iOS10(Swift 3)

正如Dan Fabulish的回答所说,这是WKWebView的一个错误,显然很快就没有解决,因为他说有一个解决办法:)

解决方法是包含20行代码,包含错误处理和注释,不需要服务器:)func fileURLForBuggyWKWebView8(fileURL: URL) throws -> URL {

// Some safety checks    if !fileURL.isFileURL {

throw NSError(

domain: "BuggyWKWebViewDomain",

code: 1001,

userInfo: [NSLocalizedDescriptionKey: NSLocalizedString("URL must be a file URL.", comment:"")])

}

try! fileURL.checkResourceIsReachable()

// Create "/temp/www" directory    let fm = FileManager.default

let tmpDirURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("www")

try! fm.createDirectory(at: tmpDirURL, withIntermediateDirectories: true, attributes: nil)

// Now copy given file to the temp directory    let dstURL = tmpDirURL.appendingPathComponent(fileURL.lastPathComponent)

let _ = try? fm.removeItem(at: dstURL)

try! fm.copyItem(at: fileURL, to: dstURL)

// Files in "/temp/www" load flawlesly :)    return dstURL}

并可用作:override func viewDidLoad() {

super.viewDidLoad()

var fileURL = URL(fileURLWithPath: Bundle.main.path(forResource:"file", ofType: "pdf")!)

if #available(iOS 9.0, *) {

// iOS9 and above. One year later things are OK.        webView.loadFileURL(fileURL, allowingReadAccessTo: fileURL)

} else {

// iOS8. Things can (sometimes) be workaround-ed        //   Brave people can do just this        //   fileURL = try! pathForBuggyWKWebView8(fileURL: fileURL)        //   webView.load(URLRequest(url: fileURL))        do {

fileURL = try fileURLForBuggyWKWebView8(fileURL: fileURL)

webView.load(URLRequest(url: fileURL))

} catch let error as NSError {

print("Error: " + error.debugDescription)

}

}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值