2013-07-22 39 views
7

Tôi đã tò mò nếu có cách nào để phát hiện người dùng nhấn nút "dừng điều hướng" trong trình duyệt bằng javascript (hoặc, thậm chí tốt hơn, jQuery.) Ví dụ: nếu bạn nhấp vào liên kết cho trang web cần tải một thời gian, bạn có thể muốn hiển thị trình tải kéo sợi. Nhưng nếu người dùng hủy điều hướng đến trang thì sao? Có cách nào để phát hiện ra rằng để thoát khỏi bộ nạp quay mà bạn đặt?Phát hiện hủy trong điều hướng bằng Javascript hoặc jQuery

EDIT: Tôi đã nghiên cứu hơn một chút, và có vẻ là một sự kiện onStop trong javascript nhưng, bạn sẽ không biết điều đó, nó chỉ hoạt động trong internet explorer. Nếu bất kỳ ai có ý tưởng nào khác để thực hiện giải pháp trình duyệt chéo như onStop, điều đó thật tuyệt vời, nhưng nếu không, tôi sẽ trả lời câu hỏi của riêng tôi sau vài ngày để đóng.

CHỈNH SỬA 2: https://stackoverflow.com/a/16216193 nói rằng điều đó là không thể. Cũng như một vài câu trả lời khác.

+2

Tôi không nghĩ rằng sẽ có một cách đáng tin cậy vì STOP có thể xảy ra trước khi JS của bạn được tải ngay trên trang. –

Trả lời

1

Được rồi, như đã hứa, tôi sẽ trả lời câu hỏi của riêng tôi.

Tôi đã nghĩ về điều này một chút - và tôi đã đưa ra một giải pháp. Tôi đã không thể làm cho nó làm việc trong mã (tôi đã không cố gắng quá khó), nhưng nó nên làm việc trong lý thuyết.

Vì vậy, tôi đã nghĩ về tiêu chí quyết định thời điểm trang web nên quyết định dừng được gọi. Tôi đã đưa ra điều này:

  • Nếu tập lệnh không chết sau một khoảng thời gian hợp lý, có thể giả định điều hướng đã bị hủy.

Sau đó, sự kiện jQuery có thể được kích hoạt trên body hoặc điều gì đó tương tự. Nhưng điều gì cấu thành "một lượng thời gian đáng kinh ngạc?" Tôi nghĩ rằng nó sẽ được một phần dựa trên thời gian render trang (tìm nạp hình ảnh, vv) để có được một ý tưởng về tốc độ internet của người dùng. Điều đó có thể được thực hiện bằng cách thực hiện:

var start = new Date(); 
var time; 
$("body").load(function() { 
    time = new Date() - start; 
    ... 
}); 

Nhân với hệ số (có thể 3 hoặc gì đó) và nhận thời gian chuyển xấp xỉ. (Điều này sẽ phải được điều chỉnh để tính toán mất bao lâu để máy chủ tạo trang tiếp theo, phụ thuộc vào mức độ động của nó.) Sau đó, sử dụng số mới time*3 bạn muốn viết như sau:

$("a").click(function() { //Anything that could go to another page should filter through here 
    setInterval(function() {$(document).trigger("navstopped");},time*3); 
} 
$(document).on("navstopped") { 
    //Do stuff now that we assume navigation stopped. 
} 

Giả sử. Đó thực sự là tất cả những gì chúng tôi đang làm ở đây. Chúng tôi có thể có kết nối Internet không ổn định, nhanh một phút, làm chậm kết nối tiếp theo. Tải máy chủ có thể không phù hợp. Có thể nó đang phục vụ các hình ảnh như một ninja cho trang này, nhưng nó bị tấn công với một loạt các yêu cầu tiếp theo, khiến nó tạo/phục vụ trang tiếp theo chậm hơn một chút. Vì vậy, chúng tôi chỉ giả định rằng có điều gì đó làm gián đoạn điều hướng một số cách, nhưng chúng tôi không nhất định.

Bây giờ, tất nhiên, điều này có thể được sử dụng kết hợp với sự kiện onStop của IE, nhưng đây thực sự là giải pháp trình duyệt chéo duy nhất tôi có thể nghĩ đến. Tôi đã không thể làm cho nó hoạt động, nhưng có lẽ một số thần jQuery có thể có khả năng trong tương lai.

Chỉnh sửa trước bài đăng: Ngay cả trước khi đăng, tôi đã có một ý tưởng khác. Nhiều trình duyệt hơn hỗ trợ onAbort.Nếu chúng tôi có hình ảnh không bao giờ tải và người dùng nhấn dừng, sẽ onAbort bị sa thải? Ngay cả khi trang web khác đang tải? Nó đòi hỏi phải thử nghiệm nhưng điều đó có thể làm việc quá. Tôi thích ý tưởng đầu tiên của tôi tốt hơn mặc dù. Mặc dù không ổn định, nó là ổn định hơn so với ý tưởng cockamamie này và tôi nhận ra điều này có thể là thực hành xấu.

+1

Ồ, điều này khá thú vị. Tôi sẽ chơi xung quanh với một số ý tưởng, giữ cho chúng tôi cập nhật. –

+0

Mọi cập nhật về chủ đề này? – ChrFin

+0

Bạn đã thử nghiệm ý tưởng chưa? –

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