visualizar porque online mis habilitar google extension descargar con chrome archivos abrir abren google-chrome

porque - ¿Por qué Google Chrome a veces advierte que un PDF descargado puede dañar su computadora?



porque mis archivos pdf se abren con chrome (7)

En realidad, si usa eventos esto siempre va a suceder si programa un enlace simple () puede evitar esa verificación y puede obtener su descarga automática

Tenemos un sitio web que hace que varios archivos PDF estén disponibles para su descarga. Los archivos PDF pueden ser estáticos o generados dinámicamente. Se descargan utilizando uno de varios mecanismos (URL estática, post back / redirect / meta-refresh / etc.). Para ciertos archivos PDF, Chrome los descarga sin quejarse. Para otros, advierte al usuario que "Este tipo de archivo puede dañar su computadora. ¿Está seguro de que desea descargar ...?" Y requiere un clic adicional.

¿Qué información usa Chrome para decidir si mostrar el mensaje? Obviamente, no es simplemente el hecho de que el archivo sea un PDF.

Para que quede claro, quiero hacer algo en el lado del servidor (usamos IIS / ASP.NET, si es importante) para evitar que el mensaje aparezca. No estoy interesado en una solución que haga que cada usuario deshabilite el mensaje en su navegador (si es posible).

Gracias.


Me encontré con un problema similar en Chrome.

Mi sitio llenó un documento pdf con algunos datos y devolvió ese pdf para que el usuario lo guarde.

La página devolvió el documento pdf generado como un archivo adjunto:

Response.ContentType = "application/pdf"; Response.AppendHeader("Content-Disposition", "attachment; filename=" + aOutputFileName); Response.TransmitFile(aFilePath); Response.End();

El enlace para la descarga de PDF tenía un atributo target = "_ blank" definido:

<a href="CreatePdf.aspx" target="_blank">Your pdf</a>

La eliminación del atributo de destino del enlace también eliminó la advertencia cuando los usuarios hicieron clic en dicho enlace.


No estoy seguro, pero mis conjeturas son:

  1. El servidor devuelve el tipo de contenido incorrecto para el archivo (es decir, "prueba / html" en lugar de "application / x-pdf"). Algunos sitios pirateados intentan enviarte separadores de pantalla (* .scr) diciéndote "¡esto está abierto! ¡Ábrelo ahora mismo!". Al hacer doble clic en el archivo se instalará un virus en su computadora.

  2. Los archivos PDF contienen JavaScript, posiblemente JavaScript encriptado.


Supongo que probablemente Chrome te esté advirtiendo en los PDF generados dinámicamente, aunque no del todo seguro.

La razón de esto es que los PDF pueden crearse para contener código ejecutable que se puede ejecutar cuando hay un agujero (desbordamiento del búfer u otro agujero explotable) en el lector que lo abre. Los archivos PDF así son generados por herramientas, donde se especifica qué código insertar, etc., y de ahí proviene mi sospecha de que los archivos generados dinámicamente están causando ese cuadro de mensaje.


TL; DR: Chrome tiene una variedad de heurísticas del lado del cliente que se utilizan para determinar la seguridad de un archivo. No creo que haya nada que pueda hacer para garantizar que un archivo esté marcado como "seguro", pero señalaré algunas cosas que podrían ayudar.

Una buena cantidad de lógica se utiliza para determinar si se debe mostrar o no ese mensaje. Afortunadamente, Chromium es de código abierto, por lo que la lógica está disponible para que puedas leer detenidamente. No estoy increíblemente familiarizado con el código de descarga, pero el mejor lugar para comenzar sería ChromeDownloadManagerDelegate::IsDangerousFile . Eso termina llamando a download_util::GetFileDangerLevel y download_util::IsExecutableMimeType que parecen estar donde viven las verificaciones contra tipos y rutas mime.

Basándome en una lectura rápida, me imagino que las redirecciones son al menos parte de la causa, ya que no están directamente relacionadas con un gesto del usuario. Hacer clic directamente a través de la descarga es "más seguro" en este contexto que hacer clic en algo, y ser redirigido a través de una variedad de rastreadores y despachadores, ya que no se puede esperar que el usuario lo siga.

La heurística también tiene en cuenta si has estado en una URL o dominio en particular anteriormente; eso también podría tener un impacto en ciertos archivos que aparecen como "seguros" y otros no.


http://productforums.google.com/d/msg/chrome/h0nzjkvxTZU/nciM-x97fEAJ

Logré deshacerme de él :-)

Introducción
Al principio probé abriendo el PDF en la consola. También probé un tiempo de espera que no ayudó, pero me dio un mensaje la primera vez (este sitio está intentando descargar varios archivos. ¿Desea permitir esto?).

setTimeout( function(){ /* export */ }, 0 );

Solución
Lo que funciona para mí es adjuntarlo directamente a un evento de clic.

document.getElementById("expButton").addEventListener( "click", function() { /* exp.. */ } );

Supongo que las exportaciones de JavaScript puras no funcionan igual que los eventos reales, tal vez podrías iniciar un evento correctamente, primero ... Actualmente no estoy para intentarlo.

ps NO he verificado (configuraciones / descargas) ''Preguntar dónde guardar cada archivo antes de descargar'', pero de cualquier manera está bien.


Solo porque esto podría ser útil:
Usé ReportViewer y tenía una función de exportación. Si hago clic en él, funciona bien, pero quería exportar cuando hice clic en mi DIV personalizada:

Sys.Application._components.ReportViewerRoot.exportReport(format)

Traté de invocarlo a través de la consola y nada estaba sucediendo visualmente, a menos que abra la página de descargas (Ctrl-J):

Luego lo intenté con el tiempo de espera antes mencionado, pero de nuevo el comportamiento no deseado:

Luego traté de adjuntarlo a un clic real, que de hecho resultó en las siguientes 2 situaciones diferentes, que no puedo explicar o investigaré más a fondo.

document.getElementById("myDIV").addEventListener( "click", function() { Sys.Application._components.ReportViewerRoot.exportReport("PDF"); } );

extraño

Deseado


Y me pregunto si realmente podrías simular esto con eventos. Intenté hacer el evento JS simple, pero no funcionó.