Pertanyaan Hentikan browser "berdenyut-denyut kehancuran" saat memuat kibasan / server dorong iframe


Saat menggunakan Comet, atau teknik Ajax Long Pull - iframe biasanya digunakan. Dan ketika iframe sedang menunggu koneksi yang lama untuk ditutup, browser akan memutar throbbernya (indikator kemajuan / pemuatan).

Beberapa situs web, misalnya etherpad.com, berhasil membuatnya berhenti.

Bagaimana mereka melakukannya?


32


asal


Jawaban:


Setelah menggali untuk sehari dan malam di intisari internet, inilah yang saya temukan:

  1. Peristiwa yang dikirim server - Sangat keren, saat ini hanya berfungsi di Opera, tetapi dapat menjadi bagian dari HTML5 dan peramban lain mungkin mendukungnya kapan-kapan. Menambahkan tag elemen baru dengan tipe konten "aplikasi / x-dom-event-stream" yang memungkinkan Server untuk memecat acara di DOM klien. Dan seharusnya tidak menunjukkan indikator kemajuan, sejauh yang saya mengerti. Ini juga merupakan draf kerja standar, dan bukan peretasan seperti seluruh komet iframe.

  2. XMLHttpRequest - di Firefox dan Safari, tetapi tidak di IE, dapat digunakan untuk pemuatan halaman tarik panjang yang memungkinkan untuk menangani fragmen yang muncul pada setiap acara readyStateChange. Tidak akan menampilkan indikator kemajuan *. - lihat komentar di bawah

  3. ActiveXObject ("htmlfile") - dapat digunakan di IE untuk membuat halaman / jendela yang berada di luar lingkup jendela saat ini. Ini membuat indikator kemajuan pergi! Iframe yang dimuat akan berada di browser yang tidak terlihat.

Lebih lanjut tentang kejadian yang dikirim server:

Dan lebih banyak tentang dua teknik lainnya (juga menjelaskan masalah dengan lebih baik): * http://meteorserver.org/browser-techniques/

Bahkan lebih mendalam tentang masing-masing teknik, dan lebih banyak teknik:


17



Bagi saya, menjalankan setTimeout pada permintaan ajax memecahkan semuanya. Ketika saya menjalankan permintaan dari document.ready, saya mendapat "throbber of doom". Tetapi dengan setTimeout itu tidak terjadi. (Perbaikan ini juga berfungsi untuk Chrome).


3



Hanya jika Anda membutuhkan beberapa contoh, orang ini memang memberikan solusi untuk memecahkan masalah firefox. http://www.shanison.com/?p=237


1



Saya memiliki masalah yang sama, dan solusinya adalah menggunakan Ajax daripada iframe tersembunyi. Jadi, bukannya menghasilkan iframe di suatu tempat di halaman:

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

Saya menggunakan jacery ajax call untuk memuat iframe ke dalam beberapa div:

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

0