उन्होंने अंत में बग को हल कर दिया! अब हम उपयोग कर सकते हैं -[WKWebView loadFileURL:allowingReadAccessToURL:]
। जाहिरा तौर पर फिक्स WWDC 2015 के वीडियो 504 में सफ़ारी व्यू कंट्रोलर का परिचय देते हुए कुछ सेकंड के लायक था
IOS8 ~ iOS10 के लिए (स्विफ्ट 3)
जैसा कि डैन फेबुलिश का जवाब है कि यह WKWebView का एक बग है, जो स्पष्ट रूप से जल्द ही किसी भी समय हल नहीं किया जा रहा है और जैसा कि उन्होंने कहा कि काम के आसपास है :)
मैं सिर्फ इसलिए जवाब दे रहा हूं क्योंकि मैं काम को इधर-उधर दिखाना चाहता था। Https://github.com/shazron/WKWebViewFIleUrlTest में दिखाया गया IMO कोड असंबंधित विवरणों से भरा है, ज्यादातर लोग शायद इसमें रुचि नहीं रखते हैं।
काम के आसपास कोड की 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)
}
}
}