[英]What's the difference between UIWebView and WKWebView when loading local resources
我想用webView加載本地資源。 我用UIWebView和WKWebView構建了一個演示,用下面的代碼做一些測試。
let uiWebView = UIWebView(frame: self.view.bounds)
self.view.addSubview(uiWebView)
let wkWebView = WKWebView(frame:CGRect(x: 0, y: 400, width: 500, height: 500))
self.view.addSubview(wkWebView)
let path = Bundle.main.path(forResource:"1", ofType: "png")
guard let realPath = path else {
return
}
let url = URL(string: realPath)
let fileUrl = URL(fileURLWithPath: realPath)
if let realUrl = url {
uiWebView.loadRequest(URLRequest(url:realUrl))
wkWebView.load(URLRequest(url:realUrl))
}
// uiWebView.loadRequest(URLRequest(url:fileUrl))
// wkWebView.load(URLRequest(url:fileUrl))
uiWebView可以加載資源,但wkWebView不能。 但是,如果我使用
uiWebView.loadRequest(URLRequest(url:fileUrl))
wkWebView.load(URLRequest(url:fileUrl))
uiWebView和wkWebView都能很好地工作。 我很困惑,任何人都可以解釋一下:我不應該為本地資源使用URL(字符串:realPath)嗎? 但是為什么UIWebView可以使用它呢?
幾點:
WKWebview
。 我會避免用UIWebView
編寫新代碼。 在iOS 8及更高版本中運行的應用程序中,使用
WKWebView
類而不是使用UIWebView
。 此外,如果渲染不應運行JavaScript的文件,請考慮將WKPreferences
屬性javaScriptEnabled
設置為false
。
/path/to/file.png
並使用file:///path/to/file.png
。 至於為什么一個URL工作而另一個不工作,讓我們做一個最小的例子:
let realPath = "/path/to/file.png"
let url = URL(string: realPath) // /path/to/file.png
let fileUrl = URL(fileURLWithPath: realPath) // file:///path/to/file.png
url
不提供方案(aka協議)。 它應該只與另一個URL一起使用,以提供您嘗試訪問的資源的絕對地址。 UIWebView
支持它是出於向后兼容的原因,但Apple決定用WKWebView
開始清理。 fileURL
有一個方案( file://
),告訴資源位於本地文件系統上。 其他常見的方案是http
, https
, ftp
等。它是資源的完整地址,因此兩個視圖都知道如何解決它。 這可能是出於安全原因,或者僅僅是如何實現WKWebView
API。
WKWebView
有一個特定的實例方法,用於加載名為loadFileURL(_:allowingReadAccessTo:)
WKWebView
loadFileURL(_:allowingReadAccessTo:)
本地資源。 這是在iOS 9中引入的。
如果您的目標是iOS 8.0或更高版本,則應該使用WKWebView
而不是UIWebView
。 請參閱: https : //developer.apple.com/reference/webkit/wkwebview
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.