2015-05-26 15 views
16

Tôi có một trang web HTML cơ bản (với một số javascript) sử dụng một thẻ neo đơn giản để tải về một tập tin như vậy:OSX Safari Khung tải gián đoạn

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

Để theo dõi số lượng tải, tôi có một onclick handler đi qua một sự kiện vào Google Analytics như vậy:

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

này hoạt động như mong đợi khi tải các tập tin sử dụng Chrome trên OS X, và IE trên Windows 7. tải tập tin và tôi thấy sự kiện trong GA của tôi tài khoản.

Khi tôi thử nghiệm trong Safari 8 trên Yosemite, tệp tải xuống, nhưng GA hiếm khi thấy sự kiện. Và dĩ nhiên là tôi gặp phải sự sợ hãi Failed to load resource: Frame load interrupted trong bảng điều khiển lỗi Safari.

Tôi cho rằng đôi khi tôi nhận được sự kiện GA vì điều kiện cuộc đua giữa khi Safari ngắt hành động và khi mã GA kích hoạt.

Vậy có thể làm gì để sửa lỗi này trong Safari để tôi luôn nhận được sự kiện GA không?

Lưu ý rằng câu hỏi của tôi có thể có nguyên nhân gốc rễ tương tự như câu hỏi chưa được trả lời này: Frame load interrupted when downloading excel files

Cập nhật ngày 06 tháng 6

Tôi bây giờ hoàn toàn bối rối. Tôi chỉ nhận thấy rằng nếu tôi mở một trang trình duyệt mới cho trang web của tôi (trong Safari), và nhấp vào tải xuống, sau đó nó được ghi lại bởi GA. Tuy nhiên, các nhấp chuột tiếp theo vẫn tải xuống tệp nhưng không được GA ghi lại.

Nếu tôi đóng cửa sổ đó và mở cửa sổ mới, thì lần tải xuống đầu tiên sẽ được GA ghi lại.

Ngược lại, khi sử dụng Chrome, mọi lượt tải xuống đều được GA ghi lại.

Tôi hiện đang nghĩ rằng tôi có thể đang xem xét vấn đề sai. Hành vi mà tôi thấy đang cho tôi biết rằng Safari đang duy trì trạng thái trong JavaScript cho phép lệnh gọi GA đầu tiên đi qua, nhưng chặn tất cả các cuộc gọi tiếp theo.

Nhưng đây là cùng mã đang được Chrome chạy, vì vậy tôi không biết bắt đầu gỡ rối vấn đề ở đâu.

Trả lời

-1

Giải pháp duy nhất tôi có thể nghĩ đến - đang đợi cho đến khi yêu cầu GA sẽ kết thúc và chỉ sau vị trí đã đặt đó.href đến liên kết tải xuống tệp mong muốn. Nhưng điều này không thực sự tốt từ quan điểm của người dùng. (Điều này có thể đạt được với hit callback https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#hitCallback).

Có thể thuộc tính tải xuống HTML5 cho href sẽ giải quyết được sự cố. Tôi không có OSX với safari để kiểm tra, vì vậy đây chỉ là suy nghĩ của tôi.

+0

Việc chờ yêu cầu GA hoàn tất sẽ xấu cho người dùng - tôi muốn giữ tình hình hiện tại. Đối với thuộc tính HTML5 'download', nó hiện không được Safari hỗ trợ. –

+0

Hoàn toàn đồng ý với sự xấu. Ngoài ra [ở đây] (http://stackoverflow.com/questions/2655387/safari-how-to-load-a-file-without-getting-safari-to-stop-the-current-ajax-reque) Tôi thấy thú vị nhận xét về thuộc tính target = "_ blank" cho thẻ < a >. Hy vọng điều này có thể giúp – Andrey

+0

Thats một điểm tốt về 'target'. Tôi sẽ cố gắng sau ngày hôm nay. –

0

Nếu bạn luôn muốn có được sự kiện ga thì nhấnCallback có khả năng là cách duy nhất để đi cho đến khi có lỗi xảy ra với Safari. Tôi sử dụng một mẫu tương tự để gửi sự kiện GA từ một trang trong ứng dụng chỉ là chuyển hướng sau khi tải toàn bộ nội dung cơ sở dữ liệu đã được thực thi trong đường ray. Không có độ trễ đáng chú ý từ việc thêm chuyển hướng javascript vào cuộc gọi lại. Tuy nhiên tôi không chắc chắn làm thế nào để bắt đầu tải xuống từ javascript ra khỏi đỉnh đầu của tôi.

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

Tôi không biết cần phải sử dụng setTimeout() cho mẫu trong trường hợp này.

+0

Tôi bây giờ nghi ngờ rằng Safari đang sửa mã GA của tôi theo những cách chặn cuộc gọi thực tế. –

+1

Safari nhanh chóng trở thành IE mới theo ý kiến ​​của tôi. Dường như nó trở nên tồi tệ hơn theo thời gian. – nigeljohnwade

Các vấn đề liên quan