Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

258
Vistas
Chrome 83: no se puede cargar el archivo

Actualicé Chrome en la versión 83, y algunos de mis formularios que usan un componente de "carga Ajax" (más información a continuación) no funcionan. He leído los problemas de la nueva versión ( https://developers.google.com/web/updates/2020/05/nic83 ) pero no encuentro nada relacionado en formularios, iframes, archivos, ajax o publicaciones.

Intentaré publicar una muestra en Fiddler, pero quiero saber si alguien sabe algo al respecto.

Por otro lado, en otros formularios tengo un cargador de múltiples archivos, arrastrar y soltar (dropzone.js) y funciona bien, pero no es fácil de convertir y necesito una solución rápida.

Una muestra ficticia (no tengo ningún sandbox para probar la carga): https://jsfiddle.net/drvespa/7ue8k94r/3/

  • En Chrome 83 (también lo probé en la versión Canary 85): no arroja ningún error porque el componente AjaxUpload no detecta el envío del formulario. La devolución de llamada se llama antes de que se realice el envío y la respuesta está vacía.
  • En Firefox: arroja un error porque el componente AjaxUpload está intentando deserializar 404 de la página de carga ficticia.

Publico la biblioteca en https://filebin.net/8sgsmq7sh14m0qen :

 /** * Ajax upload * Project page - http://valums.com/ajax-upload/ * Copyright (c) 2008 Andris Valums, http://valums.com * Licensed under the MIT license (http://valums.com/mit-license/) * Version 3.6 (26.06.2009) */
over 4 years ago · Santiago Trujillo
5 Respuestas
Responde la pregunta

0

Acabo de establecer el atributo srcdoc en iframe igual a url en el componente AjaxUpload .

iframe.setAttribute('srcdoc', this._settings.action);

Ha resuelto mi problema.

Función en el archivo AjaxUpload.js:

 _createIframe: function(){ var id = getUID(); var iframe = toElement('<iframe src="javascript:false;" name="' + id + '" />'); iframe.setAttribute('id', id); iframe.setAttribute('srcdoc', this._settings.action); iframe.style.display = 'none'; document.body.appendChild(iframe); return iframe; }
over 4 years ago · Santiago Trujillo Denunciar

0

Esta respuesta me ayudó a parchear nuestra copia de Atmail para que la carga de archivos adjuntos funcione nuevamente en Chrome 83. ¡Gracias!

La línea setAttribute anterior debe insertarse en el archivo AjaxUpload.js, dentro de la función '_createIframe'. Lo puse inmediatamente debajo de la llamada setAttribute('id', id) y eso funcionó :)

over 4 years ago · Santiago Trujillo Denunciar

0

El problema es que la biblioteca está creando un <iframe>, con un atributo src , y escucha el evento de load de ese iframe justo después de que lo hizo.

 /** * Creates iframe with unique name */ _createIframe: function () { // unique name // We cannot use getTime, because it sometimes return // same value in safari :( var id = getUID(); // Remove ie6 "This page contains both secure and nonsecure items" prompt var iframe = toElement('<iframe src="javascript:false;" name="' + id + '" />'); iframe.id = id; iframe.style.display = 'none'; d.body.appendChild(iframe); return iframe; },

luego en el método de submit

 var iframe = this._createIframe(); // some synchronous operations addEvent(iframe, 'load', function (e) { // ...

Dado que este iframe tiene un atributo src , Chrome comenzará a cargarse, y dado que su src es una URL falsa, esta operación en realidad se resuelve de forma síncrona, lo que significa que el evento de carga ya está configurado para activarse en la siguiente iteración del bucle de eventos.

 const frame = document.createElement('iframe'); frame.src = 'javascript:return false'; document.body.append(frame); frame.addEventListener('load', (evt) => console.log('loaded', frame.src) ); setTimeout( () => frame.src = "about:blank", 0 ); // Results in Chrome: // loaded javascript:return false // loaded about:blank // Results in Firefox: // loaded about:blank

Entonces, el único evento de load que recibe esta biblioteca es ese evento de carga inicial, de un documento vacío, y no el de la solicitud real.

Para solucionarlo, todo lo que necesita es eliminar este src="javascript:false;" del código de la biblioteca: https://jsfiddle.net/9phxmqjw/

over 4 years ago · Santiago Trujillo Denunciar

0

Estábamos usando este antiguo complemento:

http://jquery.malsup.com/form/#opciones-objeto

Hay una opción que podría estar usando si fuera compatible con ie8 en algún momento de los últimos 10 años...

 { url: '/branded/image_upload', type: 'POST', iframe: false }

También tuvimos un truco de envoltorio <textarea></textarea> en la respuesta.

Este código se transmitió a través de muchas iteraciones jajaja.

over 4 years ago · Santiago Trujillo Denunciar

0

¡Gracias! Además, para todos los que aún usan Opencart 1.5 después de esta actualización de Chrome, la carga de imágenes y documentos se corrige agregando:

 iframe.setAttribute('srcdoc', this._settings.action);

en \admin\view\javascript\jquery\ajaxupload.js

 var iframe = toElement('<iframe src="javascript:false;" name="' + id + '" />'); // src="javascript:false; was added // because it possibly removes ie6 prompt // "This page contains both secure and nonsecure items" // Anyway, it doesn't do any harm. iframe.setAttribute('id', id); iframe.setAttribute('srcdoc', this._settings.action); iframe.style.display = 'none'; document.body.appendChild(iframe);
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda