2012-03-29 13 views
9

Esto está causando un poco de dolor entre mis usuarios de IE8.¿Qué hace que IE8 bloquee algunas descargas de archivos?

En mi sitio tengo descargas de archivos iniciadas a través de script php (file_download.php? File = X123). En esta página, registra algunos datos en una base de datos, luego usa encabezados para forzar la descarga. Todo en esta página parece funcionar bien en todos los navegadores.

Es como llamo a esta página que parece darme el pequeño inconveniente "Para ayudar a proteger su seguridad, Internet Explorer ha bloqueado el sitio para que no descargue archivos a su computadora".

Si utilizo una etiqueta href regular <a href="/file_download.php?file=X123">download</a> se inicia correctamente (sin mensaje de descarga bloqueado de IE).

Pero cuando inicio utilizando un script jQuery me da esta advertencia.

Así que pensé que IE8 podría ser sospechoso de los redireccionamientos de JavaScript, por lo que hice una función JS simple en la página local, pero no funcionó.

Parece que jQuery puede ser el culpable ... ¿es porque se llama al evento window.location desde otra página o fuente de script? ¿Alguien sabe cómo funciona esto?

Voy a seguir probando, pero por ahora, ¿alguien puede arrojar algo de luz sobre este tema? Pedir a los usuarios que modifiquen su configuración de IE no es una opción.

Gracias

-------- Código jQuery --------------

  jQuery("a").click(function(e){ 

      if(jQuery(this).attr("href") !== undefined){ 

       downloadLink = jQuery(this).attr("href"); 
       thingClicked = jQuery(this); 

       dll_io = downloadLink.indexOf("/file_download.php?file_id="); 
       dll_io2 = downloadLink.indexOf("/file_download_safe.php?file_id="); 


        if(dll_io == 0 || dll_io2 == 0){ 

         e.preventDefault(); 

         jQuery.getScript("/includes/get_login.php?file_id=" + downloadLink + "&dll_io=" + dll_io + "&dll_io2=" + dll_io2 + "&last_url=" + document.URL, function(rp){ 
          //get_login.php sets 'requested_dl_id' cookie 

          if(dll_io2 == 0){ 
           window.location = downloadLink; 
          }else{ 
           if(rp == "allow"){ 
            window.location = downloadLink; 
           }else{ 
            jQuery("#download_prompt").click(); 
           } 
          }//end condition: if file_download_safe -> set cookie and send to page. IF file_download -> set cookie and decide to prompt or not. 

         }); 
        }//end if fd == file_download.php 
      }//end only execute code if 'a' has a defined 'href' attribute 

     }); 

---- ---- actualización

Ahora me he educado lo suficiente como para comprender la causa de este problema, pero no es una solución simple. La causa es que IE7 & 8 bloquea automáticamente las descargas que se inician desde eventos que no son del usuario. Entonces, un evento onclick lanzará una descarga, pero no un script jQuery. Todavía estoy buscando una solución alternativa.

+0

+1 sólo para la primera línea solo ... – jeroen

+0

Se puede publicar el código sospechoso? –

+0

¿Está cargando una copia de jQuery alojada en su dominio o la está extrayendo de un dominio diferente (como un CDN)? –

Respuesta

4

El uso de JavaScript para desencadenar una descarga es una forma común de distribuir malware (por ejemplo: un anuncio de banner podría desencadenar descargas en todos los sitios que muestran el anuncio).

No me sorprende que active una "bandera roja" y aumente las precauciones de seguridad.

Creo que su única opción es no utilizar javascript para activar la descarga. ¿Hay alguna otra forma en que puedas hacerlo? No

4

puedo volver a activar "Para ayudar a proteger su seguridad" thingie, pero en base a this articlewindow.location podría ser el culpable.

tienen intenta

$('<iframe>', {src:downloadLink}).appendTo('body'); 

en lugar de

window.location = downloadLink; 
+0

fue un esfuerzo valiente, pero sigo recibiendo la ventana de error. –

Cuestiones relacionadas