2012-02-17 22 views
6

Được tặng other questions cùng chủ đề Tôi cảm thấy tôi hiểu rõ các biện pháp rõ ràng để ghép các thẻ <script> thành '<scr'+'ipt..' trong chuỗi javascript, ngay cả khi chính nó là misguided.Ghép nối 'scr' + 'ipt' trong mã dấu trang javascript

Tuy nhiên, hãy xem mã cho Instapaper bookmarklet Tôi thấy d.createElement('scr' + 'ipt'). Phần liên quan của mã (làm đẹp) là ở phần cuối của câu hỏi.

Ngay cả khi mô hình (chống) này là để tránh trình phân tích cú pháp HTML bị đánh dấu sau khi xuất hiện thẻ đóng trong một chuỗi javascript, tôi có thể thấy thậm chí ít lý giải hơn khi thực hiện nó ở đây. thậm chí không đại diện cho một thẻ <script>.

Trong trường hợp này, việc này có được thực hiện vì một số lý do khác không?

javascript: function iprl5() { 
    var d = document, 
     z = d.createElement('scr' + 'ipt'), //??? 
     b = d.body, 
     l = d.location; 
+3

Ai đó đang ngủ vào thời điểm đó. –

+6

Tôi nghĩ rằng đó chỉ là một ứng dụng mang tính giáo huấn của mô hình mà không hiểu tại sao nó được thực hiện. '' var test = document.createElement ('script'); '' không barf trên tôi (và tôi sẽ không mong đợi nó). –

Trả lời

5

Đó là ngớ ngẩn để thoát "<script>" vì nó sẽ không được phân tích như tag bên trong một kịch bản khối * và nó là thậm chí ngờ nghệch và buồn để điều trị "script" đặc biệt. Nó không phải. Nó thiếu hoặc là < hoặc </, mà không có nó sẽ không bao giờ được phân tích cú pháp dưới dạng thẻ - trong bất kỳ ngữ cảnh nào. Do đó f("script")f("scr"+"ipt") có ngữ nghĩa giống hệt nhau.

Về mặt kỹ thuật trong HTML, tất cả</ trong một khối kịch bản cần phải được bảo vệ chống lại, nhưng trong thực tế các trình duyệt chỉ quan tâm đến </script>. Bởi vì điều này, "<"+"/script>" là những gì tôi đề xuất, nhưng điều đó chỉ áp dụng cho các thẻ đóng. Tức là, "<script>" (hoặc "script" là trường hợp có thể) là hoàn toàn hợp lệ bên trong một khối tập lệnh.

Mã hóa vui vẻ.


* Theo một phân tích cú pháp phù HTML: tuy nhiên, cuộn bằng tay (regex) phân tích cú pháp có thể nổ theo những cách khủng khiếp. Các quy tắc XML/XHTML là khác nhau, nhưng sau đó cần phải mã hóa < để được mã hóa tốt cho mọi người được định dạng tốt anyway ... có lẽ một số tối tăm với CDATA? Trong mọi trường hợp, nó không liên quan đến HTML.

Ngoài ra, các câu trả lời liên quan không tranh luận cho "<scr"+"ipt.." (hoặc tập con như "scr"+"ipt"): thay vào đó, họ lập luận cho bảo vệ chống lại các đóng script-tag xây dựng, mà bắt đầu bằng </, đó không phải là thậm chí có mặt trong mã trong bài đăng ...

+1

Tôi có thói quen phá thẻ '' Umbrella

+0

@Umbrella Một điểm rất hợp lệ; [đôi khi đáng buồn thay,] các công cụ phát triển đưa ra một số quy ước. –

+0

Để bạn tham khảo http://www.w3.org/TR/html4/types.html#type-cdata –

3

số

tôi nghĩ.

Tôi hy vọng điều này được thực hiện bởi người bị bỏng bởi '</script>' và quá bảo vệ.