簡體   English   中英

加載本地資源時,UIWebView和WKWebView之間有什么區別

[英]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可以使用它呢?

幾點:

  1. Apple 建議您在iOS 8及更高版本中使用WKWebview 我會避免用UIWebView編寫新代碼。

在iOS 8及更高版本中運行的應用程序中,使用WKWebView類而不是使用UIWebView 此外,如果渲染不應運行JavaScript的文件,請考慮將WKPreferences屬性javaScriptEnabled設置為false

  1. Apple一直試圖擺脫路徑 ,而是希望將URI用於本地文件。 他們建議您不要使用/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:// ),告訴資源位於本地文件系統上。 其他常見的方案是httphttpsftp等。它是資源的完整地址,因此兩個視圖都知道如何解決它。

這可能是出於安全原因,或者僅僅是如何實現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM