Thanks for contributing :)
Finally after spending hours on this , Here i found the solution for this common Webview "frame load interrupted" issue:
- Download the file in bytes form
- Store it in the Local Storage
- Load the file in Web view with the local path and it works
Try the below code for the above steps
//Method to Show Document In Web View
func methodToShowDocumentInWebView(strUrl : String, fileName : String, controller: UIViewController) {
//Get Request to download in bytes
Service.shared()?.callAPI(withURLWithoutHandlingAndLoaderAndHttpStatusCode: strUrl, andLoaderenabled: true, method: "GET", parameters: [:], withController: self, completion: { (data, error, code) in
if let dataFile = data {
let (success , payslipPath) = self.methodToWriteFileLocally(data: dataFile as! Data, fileName: fileName, directory: "Leave")
if success {
webviewInstance.loadRequest(NSURLRequest(URL: NSURL(string: payslipPath)!))
}else{
//Handle Error case
}
}
})
}
//Method to Store data Locally
func methodToWriteFileLocally(data : Data, fileName: String, directory : String) -> (success :Bool ,path :URL?) {
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
let fileURL = documentsURL?.appendingPathComponent(directory)
let payslipPath = fileURL?.appendingPathComponent(fileName)
if !FileManager.default.fileExists(atPath: payslipPath!.path) {
do{
try FileManager.default.createDirectory(atPath: fileURL!.path, withIntermediateDirectories: true, attributes: nil)
}
catch{
//Handle Catch
return (false, nil)
}
let writeSuccess = (data as AnyObject).write(to: payslipPath!, atomically: true)
return (writeSuccess, payslipPath!)
}
else
{
let writeSuccess = (data as AnyObject).write(to: payslipPath!, atomically: true)
return (writeSuccess, payslipPath!)
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…