2009-06-30 15 views
32

Khi sử dụng Comet, hoặc các kỹ thuật kéo dài Ajax - một khung nội tuyến thường được sử dụng. Và trong khi khung nội tuyến đó đang chờ kết nối dài để đóng, trình duyệt đang xoay vòng của nó (chỉ báo tiến trình/tải).Ngừng trình duyệt "throbber of doom" trong khi tải ifet push/máy chủ push iframe

Một số trang web, ví dụ: etherpad.com, được quản lý để dừng hoạt động.

Làm cách nào để thực hiện?

+0

có nhiều quán bar tải, mà một trong những bạn đề cập đến, là nó trình duyệt cụ thể, hoặc một phần của hệ điều hành? –

+0

Tôi muốn DISABLE thanh tải, thanh bạn thấy trong trình duyệt của bạn (thường là góc trên bên phải hoặc trong thanh địa chỉ). – Evgeny

Trả lời

17

Sau khi đào bới cho một ngày và một đêm trong ruột của internets, đây là những gì tôi đã đưa ra:

  1. sự kiện máy chủ gửi - Rất mát mẻ, hiện chỉ hoạt động trong Opera, nhưng có thể là một phần của HTML5 và các trình duyệt khác có thể hỗ trợ nó đôi khi. Thêm thẻ phần tử mới với loại nội dung "application/x-dom-event-stream" cho phép Máy chủ kích hoạt sự kiện trong Ứng dụng khách DOM. Và nó không nên hiển thị một chỉ số tiến bộ, theo như tôi hiểu. Nó cũng là một bản thảo làm việc của một tiêu chuẩn, và không phải là một hack như toàn bộ điều khiển sao chổi iframe.

  2. XMLHttpRequest - trong Firefox và Safari, nhưng không có trong IE, nó có thể được sử dụng để tải trang kéo dài cho phép xử lý các đoạn khi chúng xuất hiện trên mỗi sự kiện readyStateChange. Sẽ không hiển thị chỉ báo tiến trình *. - xem nhận xét bên dưới

  3. ActiveXObject ("htmlfile") - có thể được sử dụng trong IE để tạo trang/cửa sổ nằm ngoài phạm vi cửa sổ hiện tại. Điều này làm cho chỉ báo tiến trình biến mất! Khung nội tuyến đã tải sẽ nằm trong trình duyệt ẩn.

Thông tin thêm về máy chủ gửi-sự kiện:

Và thêm về hai kỹ thuật khác (cũng giải thích các vấn đề tốt hơn): * http://meteorserver.org/browser-techniques/

Thậm chí sâu hơn về từng kỹ thuật và nhiều kỹ thuật khác:

+12

Khi sử dụng phương pháp (2), XHR, nó cần phải được gọi sau khi tải xong trang. Ví dụ bằng cách sử dụng setTimeout(). Nếu nó bắt đầu trước khi trang hoàn thành quay máy quay, sau đó nó sẽ tiếp tục quay nó trong khi tải XHR - và một "ESC" có thể hủy bỏ nó, do đó, nó xấu. – Evgeny

+1

Cảm ơn lời bình luận đó Evgeny. Tôi đã đập đầu vào trang của tôi trong nhiều tuần nay. Thêm một vài thời gian chờ thứ hai trước khi bỏ phiếu cố định vấn đề phát hành trang của tôi. – Mnebuerquo

+0

@Evgeny Thật không may là giải pháp thời gian chờ không hoạt động trong Chrome, nó vẫn mang lại cho tôi chỉ báo tải (Hoạt động trong Firefox). Bất kỳ gợi ý nào? – Jules

1

Chỉ trong trường hợp mà bạn có thể cần một số ví dụ, anh chàng này đã đưa ra một giải pháp để giải quyết vấn đề firefox. http://www.shanison.com/?p=237

3

Đối với tôi, chạy setTimeout trên yêu cầu ajax đã giải quyết mọi thứ. Khi tôi chạy yêu cầu từ document.ready, tôi đã nhận được "throbber of doom". Nhưng với setTimeout nó không xảy ra. (Bản sửa lỗi này cũng hoạt động đối với Chrome).

0

Tôi đã gặp vấn đề tương tự và giải pháp là sử dụng Ajax thay vì iframe ẩn.Vì vậy, thay vì tạo ra iframe ở đâu đó trong trang:

$("#chat .msg_list").prepend('<iframe id="hidden" src="chatFrame?id=$userId" frameborder="0" height="0" width="100%"></iframe>'); 

tôi đã sử dụng cuộc gọi jquery ajax để tải nội dung iframe vào một số div:

$('#chat #chat_comet').load('chatFrame?id=$userId'); 
+0

Câu trả lời được chấp nhận đã giải thích cách sử dụng ajax. – Evgeny

+0

Có, nhưng lần đầu tiên tôi không rõ ràng nên tôi đã viết một câu trả lời đơn giản hơn. –

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