it-swarm-id.com

window.onunload tidak berfungsi dengan baik di browser Chrome. Ada yang bisa bantu saya?

Saya telah menulis kode ini 

function winUnload() {
    alert("Unload Window");
    MyMethod();
}

window.onunload = function() { winUnload(); }

Kode ini berfungsi dengan baik di IE dan Firefox. Tetapi kode ini tidak berfungsi di Chrome. Kedua pernyataan alert("Unload Window"); dan MyMethod(); tidak berfungsi.

31
Imran

Ada beberapa tindakan yang tidak berfungsi di chrome, di dalam acara bongkar. Peringatan atau konfirmasi kotak adalah hal semacam itu.

Tapi apa yang mungkin (AFAIK):

  1. Buka munculan (dengan window.open) - tetapi ini hanya akan berfungsi, jika pemblokir munculan dinonaktifkan untuk situs Anda
  2. Kembalikan string sederhana (dalam acara beforeunload), yang memicu kotak konfirmasi, yang menanyakan pengguna apakah ia ingin meninggalkan halaman.

Contoh untuk # 2:

$(window).on('beforeunload', function() {
    return 'Your own message goes here...';
});

Demo: http://jsfiddle.net/PQz5k/

52
Armin

Saya tahu ini sudah lama tetapi saya menemukan cara untuk membongkar menggunakan Chrome

window.onbeforeunload = function () {
  myFunction();
};
6
Carlos

Jawaban Armin sangat berguna, terima kasih. # 2 adalah hal yang paling penting untuk diketahui ketika mencoba mengatur membongkar acara yang berfungsi di sebagian besar browser: Anda tidak dapat memberi tahu () atau mengonfirmasi (), tetapi mengembalikan string akan menghasilkan modal konfirmasi.

Tetapi saya menemukan bahwa bahkan dengan mengembalikan string saja, saya memiliki beberapa masalah lintas browser khusus untuk Mootools (menggunakan versi 1.4.5 dalam contoh ini). Implementasi khusus Mootools ini bekerja sangat baik di Firefox, tetapi tidak menghasilkan popup konfirmasi di Chrome atau Safari: 

window.addEvent("beforeunload", function() {
    return "Are you sure you want to leave this page?";
});

Jadi untuk mendapatkan acara onbeforeonload saya untuk bekerja di browser, saya harus menggunakan panggilan asli JavaScript: 

window.onbeforeunload = function() {
    return "Are you sure you want to leave this page?";
}

Tidak yakin mengapa ini terjadi, atau jika sudah diperbaiki di Mootools versi terbaru.

5
Tracy

Anda dapat mencoba menggunakan eventhide event untuk Chrome and Safari.

Periksa tautan ini:

Bagaimana mendeteksi dukungan browser untuk pageShow dan pageHide?

http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

3

Silakan coba window.onbeforeunload sebagai ganti window.onunload untuk chrome . Anda juga dapat mencoba memanggil onbeforeunload dari tag body> yang mungkin berfungsi dalam chrome.

Namun, kami memiliki masalah dengan fungsi bongkar di browser chrome . Silakan periksa

location.href tidak berfungsi di chrome saat dipanggil melalui acara pembongkaran body/jendela

Terima kasih, Diterima

3
Nivedittan

Acara onunload tidak akan menyala jika acara onload tidak menyala. Sayangnya acara onload menunggu semua konten biner (mis. Gambar) untuk memuat, dan skrip inline dijalankan sebelum acara onload menyala. DOMContentLoaded kebakaran ketika halaman terlihat, sebelum memuat tidak. Dan sekarang standar dalam HTML 5 , dan Anda dapat menguji dukungan browser tetapi perhatikan ini membutuhkan <!DOCTYPE html> (setidaknya di Chrome). Namun, saya tidak dapat menemukan acara yang sesuai untuk menurunkan DOM. Dan peristiwa hipotetis semacam itu mungkin tidak berfungsi karena beberapa browser mungkin membuat DOM tetap ada untuk melakukan fitur "restore tab".

Satu-satunya solusi potensial yang saya temukan sejauh ini adalah Page Visibility API , yang tampaknya membutuhkan <!DOCTYPE html>.

1

Ini bekerja : 

var unloadEvent = function (e) {
    var confirmationMessage = "Warning: Leaving this page will result in any unsaved data being lost. Are you sure you wish to continue?";
    (e || window.event).returnValue = confirmationMessage; //Gecko + IE
    return confirmationMessage; //Webkit, Safari, Chrome etc.
};
window.addEventListener("beforeunload", unloadEvent);
1
Amulya Kashyap