es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener la API Fetch/XMLHttpRequest no puede cargar blob:url debido a comprobaciones de control de acceso mientras se realiza la solicitud desde WKwebview.

Para descargar imágenes y pdf que tienen una URL blob: en wkwebview, inyecté JavaScript en mi código. Aquí está el JavaScript:

function (url) {
    function blobToBase64String(blob, callback) {
        var reader = new FileReader();
        reader.onloadend = function () {
            callback(this.result.split(",")[1]);
        };
        reader.readAsDataURL(blob);
    }
    if (url.startsWith("blob:")) {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", url, true);

        xhr.responseType = "blob";
        xhr.onload = function () {
            if (this.status !== 200) {
                return;
            }

            var blob = this.response;

            blobToBase64String(blob, function (base64String) {
                webkit.messageHandlers.downloadManager.postMessage({
                    url: url,
                    mimeType: blob.type,
                    size: blob.size,
                    base64String: base64String
                });
            });
        };

        xhr.send();
        return;
    }

    var link = document.createElement("a");
    link.href = url;
    link.dispatchEvent(new MouseEvent("click"));
}

Este es el error que estoy obteniendo:

“XMLHttpRequest no puede cargar blob:https://url debido a comprobaciones de control de acceso. ¿Hay alguna manera de permitir la solicitud en wkwebview? No estoy seguro de a dónde dirigirme. ¿Hay alguna preferencia en wkwebview que deba habilitarse?”

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de permitir solicitudes en WKWebView. Puede habilitar el intercambio de recursos de origen cruzado (CORS) en WKWebView para omitir las comprobaciones de control de acceso.

    Para hacer esto, puede agregar el siguiente código en la inicialización de su WKWebView:

    let preferences = WKPreferences()
    preferences.setValue(true, forKey: "allowFileAccessFromFileURLs")
    preferences.setValue(true, forKey: "allowUniversalAccessFromFileURLs")
    
    let configuration = WKWebViewConfiguration()
    configuration.preferences = preferences
    
    let webView = WKWebView(frame: .zero, configuration: configuration)
    

    Las preferencias allowFileAccessFromFileURLs y allowUniversalAccessFromFileURLs permiten que su WKWebView acceda a archivos y recursos desde URL de archivo y permiten acceso universal desde URL de archivo, respectivamente.

    Después de habilitar estas preferencias, el error “XMLHttpRequest no puede cargar blob:” debe resolverse y debería poder descargar imágenes y PDF con URL de blob utilizando el código JavaScript inyectado.

Comments are closed.