it-swarm-id.com

Abaikan kesalahan sintaksis javascript di halaman dan lanjutkan menjalankan skrip

Saya mengembangkan plugin untuk WordPress. Ia menggunakan beberapa jquery di sisi pengguna (tema) sebagai plugin jquery . Masalahnya adalah, ketika ada kesalahan javascript dengan plugin lain yang dibuat oleh autors lain, javascript plugin saya gagal dieksekusi.

Dan yang terburuk adalah orang-orang menganggap bahwa ada kesalahan serius dengan plugin saya meskipun itu berfungsi 100% baik dengan kesalahan penanganan pernyataan bersyarat. Tetapi ini sebenarnya disebabkan oleh beberapa kesalahan sintaksis javascript lainnya dari beberapa pengarang/pengarang tema WP lainnya.

Apakah ada cara untuk melanjutkan menjalankan plugin JS saya dengan mengabaikan kesalahan JS lainnya. Atau bisakah saya memiliki saran untuk menangani masalah ini ??

enter image description here

47

Coba:

window.onerror = function(){
   return true;
}

Itu jika Anda bisa memasukkan ini sebelum skrip yang disadap dijalankan.

22
Cosmin

Anda harus memperbaiki kesalahan JavaScript yang lama karena dapat menimbulkan banyak masalah, bukan untuk saat ini tetapi untuk waktu berikutnya.

Letakkan file JavaScript/kode Anda di atas (sebelum JS mengalami kesalahan), dan panggil sebelum JavaScript dipengaruhi oleh kode JavaScript lainnya.

Jika Anda perlu menangani pengecualian JavaScript pada waktu berjalan, opsi terbaik adalah

try { /* run js code */ } 
    catch (error){ /* resolve the issue or bug */ }
8
Krishna Kumar

Anda harus dapat menelan kesalahan apa pun menggunakan acara error:

$(window).error(function(e){
    e.preventDefault();
});

Saya belum pernah mencoba ini, tetapi harus bekerja secara teori.

Perlu dicatat bahwa ini mungkin bukan solusi yang bagus untuk masalah Anda. Bisa jadi plugin Anda mengganggu plugin lain. Tentu saja, kemungkinan kesalahan itu bukan kesalahan Anda sendiri, tetapi secara umum (dengan plugin yang dirilis secara publik) bukan itu masalahnya.

4
Shmiddty

Saya mengalami masalah yang sama: Ada banyak plugin di luar sana yang membuat terlalu banyak asumsi dan menyebabkan kesalahan JavaScript pada halaman ANDA, bahkan ketika Anda menjadi warga negara yang baik; kesalahan ini tidak ada hubungannya dengan plugin Anda.

Tidak ada gunanya mencoba menangani kesalahan di plugin lain - IMO lebih baik mandiri tetapi tahan terhadap kesalahan mereka.

Dalam kasus saya, kesalahan menghentikan acara siap DOM jquery, dan kode init JavaScript saya tidak dijalankan. Bentuk kesalahan yang sebenarnya tidak penting - solusinya adalah menjalankan beberapa peristiwa.

Solusi bagi saya adalah memiliki fallback selain mengandalkan jQuery DOM ready event:

  1. Saya membungkus kode apa pun yang ingin saya tampilkan ke acara siap DOM ke dalam fungsinya sendiri - mis. my_hardened_init_action ();
  2. Saya menambahkan fungsi, my_hardened_init (), yang hanya berjalan sekali. Ini memanggil my_hardened_init_action () saat pertama kali dipanggil, dan tidak melakukan apa-apa pada panggilan berikutnya.
  3. Saya menambahkan berbagai metode untuk memanggil my_hardened_init () di catatan kaki WordPress. Dalam kasus saya, saya hanya butuh dua. Pertama, mencoba jQuery DOM init biasa, tetapi kembali ke setTimeout sederhana (). Jadi jika jQuery DOM init tidak pernah menyala karena JavaScript rusak, batas waktu akan menyala segera setelah saat halaman selesai memuat.

Anda dapat menambahkan beberapa fallback lainnya - bahkan menambahkan kode ke header jika perlu. Karena my_hardened_init () hanya berjalan satu kali, Anda dapat mencoba sebanyak yang Anda inginkan untuk memicunya.

Ini telah berfungsi pada banyak situs klien dengan berbagai plugin yang rusak lainnya.

Semoga ini membantu.

4
Jhong
2
ScottE

Jika halaman Anda sedang berjalan. Menggunakan:

$(window).error(function(e){
        e.preventDefault();
});  // IGNORE ALL ERROR JQUERY!

atau gunakan:

window.onerror = function(){
   return true;
}  // IGNORE ALL ERROR JAVASCRIPT!
1
<script>
var _z = console;
Object.defineProperty(window, 'console', {
    get: function(){
        if (_z._commandLineAPI) {
         return true;   
        }
        return _z;
    },
    set: function(val) {
        _z = val;
    }
});
</script>
1

Masukkan panggilan Anda ke plugin 

try{
  ......
}
catch(e){

}
0
Rahul

Mungkin Anda bisa mencoba meletakkan js Anda di objek html, sehingga dieksekusi di halaman terpisah. Itu mungkin tidak akan banyak membantu jika js di halaman utama tidak berjalan untuk berinteraksi dengan objek. Hanya sesuatu untuk dimainkan.

0
Ian Wizard

Ini bekerja untuk saya:

try{
    //your code
}
catch(error)
{
    return true;
}
0
Enginerd Sunio

Pernyataan try catch reguler tidak akan berfungsi untuk jenis kesalahan ini. 

Kemungkinan solusi:

Gunakan inline-css untuk mengapung bilah ke kiri, bukan jQuery (saya tidak yakin apa fungsi penuh plugin Anda, tetapi jika hanya mengapung bilah ke kiri mengapa tidak menggunakan css?)

Memiliki iframe yang tidak terlihat yang mencoba menjalankan beberapa kode pada halaman induk. jika gagal daripada memberi tahu pengguna (dari dalam iframe ini) bahwa itu bukan kesalahan Anda :)

0
codelove