Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

255
Views
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 answers
Answer question

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 Report

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 Report

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!