Прерывание кадров в Safari OSX
У меня есть базовый HTML-сайт (с некоторым javascript), используя простой тег привязки для загрузки файла следующим образом:
<a href="../resources/mexml/MexmlSamples-1.0.zip">Mexml Samples 1.0</a>
Чтобы отслеживать количество загрузок, у меня есть обработчик onclick
, который передает событие в Google Analytics следующим образом:
$('#mybutton').click(function(e){ga('send','event','Download','MexmlSample','MexmlSample-1.0');});
Это работает так, как ожидалось, при загрузке файла с помощью Chrome OS X и IE в Windows 7. Загружается файл, и я вижу это событие в моей учетной записи GA.
Когда я тестирую его в Safari 8 на Yosemite, файл загружается, но GA редко видит событие. И, конечно, я получаю страшный Failed to load resource: Frame load interrupted
в консоли ошибок Safari.
Я предполагаю, что иногда получаю событие GA из-за состояния гонки между тем, когда Safari прерывает действие и когда запускается код GA.
Итак, можно ли все-таки исправить это в Safari, чтобы всегда получать события GA?
Обратите внимание, что мой вопрос, вероятно, имеет ту же самую основную причину, что и этот без ответа вопрос: Загрузка кадра прерывается при загрузке файлов excel
Обновление 6 июня
Теперь я совершенно смущен. Я просто заметил, что если я открою новую страницу браузера на моем сайте (в Safari) и нажимаю на загрузку, то она будет занесена в журнал GA. Однако последующие клики загружают еще файл, но не регистрируются GA.
Если я закрою это окно и открою новый, то снова первая загрузка будет записана GA.
В отличие от этого, при использовании Chrome каждая загрузка регистрируется GA.
Теперь я думаю, что, возможно, я искал неправильную проблему. Поведение, которое я вижу, говорит мне, что Safari поддерживает состояние в JavaScript, которое позволяет выполнить первый вызов GA, но блокирует все последующие вызовы.
Но это тот же код, который запускается в Chrome, поэтому я не знаю, как начать отладку проблемы.
Ответы
Ответ 1
Если вы всегда хотите получить событие ga, то hitCallback, скорее всего, будет единственным способом, до тех пор, пока не будет исправлено неправильное использование Safari. Я использую подобный шаблон для отправки события GA со страницы в приложении, которая является просто перенаправлением после того, как в rails был запущен весь загруженный материал базы данных. Нет заметного отставания от добавления javascript-перенаправления в обратный вызов. Однако я не уверен, как начать загрузку с javascript с верхней части моей головы.
ga('send','event','Download','MexmlSample','MexmlSample-1.0', {
hitCallback: function(){
initiateDownload();
})
Мне не известно о необходимости использования setTimeout() для шаблона в этом экземпляре.
Ответ 2
Единственное решение, о котором я могу думать, - до тех пор, пока запрос GA не завершится, и только после этого установите location.href на нужную ссылку для загрузки файла. Но это не очень хорошо с точки зрения пользователя. (Это может быть достигнуто с помощью callbackback https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#hitCallback).
Вероятно, атрибут загрузки HTML5 для href решит проблему.
У меня нет OSX с сафари для тестирования, так что это только мои мысли.