2015-05-26 14 views
16

Mam podstawowe internetową HTML (z niektórych javascript) za pomocą prostego znacznika zakotwiczenia, aby pobrać plik tak:OSX Safari rama nośna Interrupted

<a href="../resources/mexml/MexmlSamples-1.0.zip">Mexml Samples 1.0</a> 

Aby śledzić liczbę pobrań, mam onclick teleskopowa, która przechodzi zdarzenie do Google Analytics tak:

$('#mybutton').click(function(e){ga('send','event','Download','MexmlSample','MexmlSample-1.0');}); 

To działa zgodnie z oczekiwaniami podczas pobierania pliku za pomocą Chrome na OS X, Windows i IE 7. pobieranie plików i widzę zdarzenia w moim GA konto.

Kiedy testuję to w Safari 8 na Yosemite, plik pobiera, ale GA rzadko widzi to wydarzenie. I oczywiście budzę przerażenie Failed to load resource: Frame load interrupted w konsoli błędów Safari.

Zakładam, że otrzymuję zdarzenie GA czasem ze względu na stan wyścigu między momentem, w którym Safari przerywa akcję i po uruchomieniu kodu GA.

Czy można zrobić wszystko, aby to naprawić w Safari, aby zawsze otrzymywać zdarzenia GA?

Zauważ, że prawdopodobnie moje pytanie ma tę samą przyczynę jak to bez odpowiedzi pytanie: Frame load interrupted when downloading excel files

Aktualizacja 06 czerwca

jestem teraz całkowicie zdezorientowany. Zauważyłem, że jeśli otworzę nową stronę przeglądarki w mojej witrynie (w Safari) i kliknę plik, to zostanie ono zarejestrowane przez GA. Jednak kolejne kliknięcia nadal pobierają plik, ale nie są rejestrowane przez GA.

Jeśli zamknę to okno i otworzę nowe, to pierwsze pobieranie zostanie zarejestrowane przez GA.

W przeciwieństwie do tego, gdy używasz Chrome, każde pobranie zostanie zarejestrowane przez GA.

Teraz myślę, że może szukam niewłaściwego problemu. Zachowanie, które widzę, mówi mi, że Safari utrzymuje stan w kodzie JavaScript, który umożliwia pierwsze wywołanie GA, ale blokuje wszystkie kolejne wywołania.

Ale ten sam kod jest uruchamiany przez Chrome, więc nie wiem, jak uruchomić debugowanie problemu.

Odpowiedz

-1

Jedyne rozwiązanie, jakie mogę wymyślić - to czekanie, aż zapytanie GA się zakończy, a dopiero po tym ustawieniu location.href na żądany link do pobrania pliku. Ale nie jest to dobre z punktu widzenia użytkownika. (Można to osiągnąć za pomocą połączenia zwrotnego https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#hitCallback).

Prawdopodobnie atrybut pobierania HTML5 dla href rozwiąże problem. Nie mam systemu OSX z safari, aby przetestować, więc to tylko moje myśli.

+0

Oczekiwanie na zakończenie zlecenia GA byłoby brzydkie dla użytkownika - wolę zachować obecną sytuację. Jeśli chodzi o atrybut "pobierz" HTML5, nie jest on obecnie obsługiwany przez Safari. –

+0

Całkowicie zgadzam się z brzydotą. Również [tutaj] (http://stackoverflow.com/questions/2655387/safari-how-to-load-a-file-without-getting-safari-to-stop-the-current-ajax-reque) znalazłem interesujące skomentuj atrybut target = "_ blank" dla tagu < a >. Mam nadzieję, że to pomoże – Andrey

+0

To jest dobry punkt o "celu". Spróbuję tego później. –

0

Jeśli zawsze chcesz uzyskać zdarzenie ga, wtedy hitCallback jest prawdopodobnie jedynym sposobem, aby naprawić wszystko, co jest nie tak z Safari. Używam podobnego wzorca do wysyłania zdarzenia GA ze strony w aplikacji, która jest po prostu przekierowaniem po wykonaniu całego ładunku bazy danych w szynach. Nie ma zauważalnego opóźnienia od dodania przekierowania javascript do wywołania zwrotnego. Jednak nie jestem pewien, jak rozpocząć pobieranie z javascript z góry mojej głowy.

ga('send','event','Download','MexmlSample','MexmlSample-1.0', { 
    hitCallback: function(){ 
    initiateDownload(); 
    }) 

Nie jestem świadomy potrzeby użycia setTimeout() dla wzorca w tym przypadku.

+0

Podejrzewam, że Safari przekręca mój kod GA w sposób, który blokuje faktyczne połączenie. –

+1

Safari szybko staje się nowym IE moim zdaniem. Z czasem wydaje się coraz gorzej. – nigeljohnwade