undeclared type support previous example broken before ios uiwebview wkwebview

ios - type - ¿Cuál es la diferencia entre UIWebView y WKWebView cuando se cargan recursos locales?



wkwebview load url (2)

Quiero cargar recursos locales con webView. Construí una demostración con UIWebView y WKWebView para hacer algunas pruebas con el código a continuación.

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))

El uiWebView puede cargar el recurso pero wkWebView no puede. Pero si yo uso

uiWebView.loadRequest(URLRequest(url:fileUrl)) wkWebView.load(URLRequest(url:fileUrl))

Tanto uiWebView como wkWebView pueden funcionar bien. Estoy confundido y ¿alguien puede explicarme eso? ¿No debería usar la URL (cadena: realPath) para un recurso local? Pero ¿por qué UIWebView puede usarlo?


Esto puede ser por razones de seguridad, o simplemente cómo se implementó la API WKWebView .

WKWebView tiene un método de instancia específico para cargar recursos locales llamado loadFileURL(_:allowingReadAccessTo:) . Esto fue introducido en iOS 9.

Nota

Si está apuntando a iOS 8.0 o más reciente, debe usar WKWebView lugar de UIWebView . Consulte: https://developer.apple.com/reference/webkit/wkwebview


Un par de puntos:

  1. Apple recommends que uses WKWebview para iOS 8 y versiones posteriores. Yo evitaría escribir código nuevo con UIWebView .

En las aplicaciones que se ejecutan en iOS 8 y versiones posteriores, use la clase WKWebView lugar de usar UIWebView . Además, considere la posibilidad de configurar la propiedad de WKPreferences en false si renderiza archivos que no deben ejecutar JavaScript.

  1. Apple ha intentado alejarse de la ruta y, en cambio, desea utilizar URI incluso para archivos locales. Recomiendan que NO use /path/to/file.png y use file:///path/to/file.png en file:///path/to/file.png lugar.

En cuanto a por qué una URL funciona y la otra no, vamos a hacer un ejemplo mínimo:

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 no proporciona el esquema (también conocido como protocolo). Solo se debe utilizar junto con otra URL para proporcionar la dirección absoluta del recurso al que intenta acceder. UIWebView admite por razones de compatibilidad con versiones anteriores, pero Apple decidió comenzar con WKWebView .
  • fileURL tiene un esquema ( file:// ) que indica que el recurso se encuentra en el sistema de archivos local. Otros esquemas comunes son http , https , ftp , etc. Es una dirección completa a un recurso para que ambas vistas sepan cómo resolverlo.