Pertanyaan Mengapa saya harus keluar dari karakter '/' dalam JavaScript? [duplikat]


Pertanyaan ini sudah memiliki jawaban di sini:

Apa sebenarnya yang perlu dilepaskan dalam string javascript. Atau, lebih spesifik, mengapa demikian

var snaphtml = '<script src="http://seadragon.com/embed/lxe.js?width=auto&height=400px"></script>';

memberikan kesalahan sintaks? Lolos dari final <\/script> tampaknya memperbaiki kesalahan sintaks, tetapi ini tidak masuk akal bagi saya sebagai pemula javascript.


6
2018-01-31 05:01


asal


Jawaban:


Masalahnya mungkin karena browser web melihat "</script>"urutan dan memutuskan itulah akhir dari blok skrip.

Cara lain untuk memperbaiki masalah selain menggunakan urutan pelarian seperti yang Anda lakukan adalah memisahkannya menjadi 2 string yang digabungkan:

"<" + "/script>" 

Perilaku yang Anda lihat bukanlah bug di bagian peramban.

Browser tidak "melihat ke dalam" blok skrip, mereka hanya meneruskan konten ke mesin skrip. "</script>"urutannya adalah bagaimana mereka tahu bahwa mereka telah sampai ke ujung blok, dan karena browser tidak menafsirkan isi blok, tidak ada cara untuk mengetahui bahwa itu dalam konteks string literal dalam kode skrip .

Ingat bahwa peramban dapat mendukung lebih banyak bahasa skrip daripada hanya Javascript, meskipun tidak biasa dilihat. Internet Explorer mendukung VBscript (dan saya pikir bahasa scripting yang dapat dijalankan oleh host skrip windows, tapi saya tidak yakin tentang itu). Dan ketika kemampuan untuk memiliki blok skrip dimasukkan ke dalam cara browser kembali ketika, tidak ada yang bisa yakin bahwa Javascript akan berakhir menjadi universal.


11
2018-01-31 05:14



Anda benar-benar berlari ke masalah html-escape: browser menafsirkan </script> dalam string Anda sebagai tag-tutup untuk script elemen di mana javascript Anda disematkan - jadi untuk peramban, garis Anda tampak seperti tidak ada tanda kutip yang dekat:

var snaphtml = '<script src="http://seadragon.com/embed/lxe.js?width=auto&height=400px">

Untuk memperbaikinya, seperti yang Anda temukan, Anda hanya perlu berubah </script> untuk hal lain, seperti <\/script> atau \074/script>, dll.

Satu-satunya karakter yang biasanya perlu Anda khawatirkan dalam string javascript adalah double-quote (jika Anda mengutip string dengan tanda kutip ganda), satu kutipan (jika Anda mengutip string dengan satu kutipan), backslash, carriage-return (\ r), atau linefeed (\ n).


4
2018-01-31 05:19



Pengurai HTML akan menginterpretasikan ujung token tag (pemisah ETAGO </) di string Anda, sebagai akhir dari tag skrip saat ini, memberi Anda untaian yang belum diselesaikan  SyntaxError.

Ada beberapa solusi, termasuk penggunaan CDATA blok, tetapi cara paling sederhana adalah untuk melarikan diri dari karakter itu, atau membuat penggabungan string:

var snaphtml = '<script src="...">\x3C/script>';

var snaphtml = '<script src="..."><' + '/script>';

Dan tentu saja, Anda juga dapat membuat Anda script elemen secara terprogram dan tambahkan ke kepala:

var newScript = document.createElement("script");
newScript.src = "..."; 
//...

2
2018-01-31 05:15



Lihat Segala hal yang selalu ingin Anda ketahui </, aka. pemisah end-tag terbuka (ETAGO) untuk penjelasan rinci. TL; DR tidak perlu peretasan gila seperti penggabungan string atau pelarian harfiah char - lepaskan saja seperti:

var snaphtml = '<\/script>';

Juga, perhatikan bahwa ini hanya diperlukan untuk skrip sebaris.


1
2018-06-27 14:44