javascript - mac - Carga de OSX Safari Frame interrumpida
java para safari (2)
La única solución en la que puedo pensar está esperando hasta que finalice la solicitud de GA, y solo después de eso, establezca location.href en el enlace de descarga de archivos deseado. Pero esto no es realmente bueno desde la perspectiva del usuario. (Esto se puede lograr con la devolución de llamada correcta https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#hitCallback ).
Probablemente, el atributo de descarga HTML5 para href resolverá el problema. No tengo ningún OSX con Safari para probar, así que esto es solo mi opinión.
Tengo un sitio web HTML básico (con algunos javascript) usando una etiqueta de anclaje simple para descargar un archivo como ese:
<a href="../resources/mexml/MexmlSamples-1.0.zip">Mexml Samples 1.0</a>
Para rastrear el número de descargas, tengo un controlador onclick
que pasa un evento a Google Analytics de la siguiente manera:
$(''#mybutton'').click(function(e){ga(''send'',''event'',''Download'',''MexmlSample'',''MexmlSample-1.0'');});
Esto funciona como se esperaba al descargar el archivo con Chrome en OS X e IE en Windows 7. El archivo se descarga y veo el evento en mi cuenta de GA.
Cuando lo pruebo en Safari 8 en Yosemite, el archivo se descarga, pero GA rara vez ve el evento. Y, por supuesto, recibo el temido Failed to load resource: Frame load interrupted
en la consola de error de Safari.
Supongo que recibo el evento GA a veces debido a una condición de carrera entre cuando Safari interrumpe la acción y cuando el código GA se dispara.
Entonces, ¿se puede hacer algo para arreglar esto en Safari para que siempre obtenga los eventos de GA?
Tenga en cuenta que mi pregunta probablemente tiene la misma causa raíz que esta pregunta sin respuesta: la carga del fotograma se interrumpe al descargar archivos de Excel
Actualización 6 de junio
Ahora estoy completamente confundido. Me acabo de dar cuenta de que si abro una nueva página de navegador en mi sitio (en Safari) y hago clic en la descarga, GA la registra. Sin embargo, los clics posteriores descargan el archivo, pero GA no lo registra.
Si cierro esa ventana y abro una nueva, GA vuelve a registrar la primera descarga.
Por el contrario, cuando se usa Chrome, GA descarga cada descarga.
Ahora estoy pensando que puedo estar mirando el problema equivocado. El comportamiento que estoy viendo me dice que Safari mantiene un estado en JavaScript que permite la primera llamada de GA, pero bloquea todas las llamadas posteriores.
Pero este es el mismo código que Chrome está ejecutando, por lo que no sé cómo ni siquiera cómo empezar a depurar el problema.
Si siempre deseas obtener el evento ga, entonces es probable que HitCallback sea el único camino hasta que todo lo que esté mal con Safari sea reparado. Utilizo un patrón similar para enviar un evento de GA desde una página en una aplicación que es solo una redirección después de que se haya ejecutado todo un montón de material de la base de datos en los rieles. No hay un retraso notable al agregar el redireccionamiento de JavaScript a la devolución de llamada. Sin embargo, no estoy seguro de cómo iniciar la descarga de JavaScript en la parte superior de mi cabeza.
ga(''send'',''event'',''Download'',''MexmlSample'',''MexmlSample-1.0'', {
hitCallback: function(){
initiateDownload();
})
No estoy al tanto de la necesidad de usar setTimeout () para el patrón en esta instancia.