Tôi đang sử dụng các mẫu văn bản ES6 để xây dựng một số HTML theo chuỗi và cho đến nay nó đã hoạt động tốt. Tuy nhiên, ngay sau khi tôi cố gắng để đưa các văn bản đen </script>
trong chuỗi của tôi trình duyệt ném lên và ném các lỗi cú pháp:Lỗi cú pháp "Không có mẫu chuẩn" khi chữ chứa thẻ tập lệnh
SyntaxError: Unterminated template literal
Đây là một mẫu JavaScript đơn giản mà ném lỗi:
var str=`
<script>
</script>
`
var pre = document.createElement('pre')
pre.textContent = str
document.body.appendChild(pre)
Xem mã ở trên trong JS Fiddle. Có vẻ như những gì đang xảy ra là nó từ bỏ tìm kiếm trích dẫn cuối cùng và thay vào đó bắt đầu xử lý mọi thứ tại điểm dưới dạng HTML theo nghĩa đen, do đó, tất cả các mã JavaScript sau thời điểm đó được xử lý không chính xác dưới dạng HTML, không phải vậy!
Nếu tôi thay script
bởi bất kỳ khác tag HTML pháp lý (và thậm chí thẻ không hợp lệ như scripty
) sau đó nó hoạt động tốt, vì vậy tôi không thể nhìn thấy thế nào điều này có thể có thể là một lỗi cú pháp hoặc một trường hợp kỳ lạ nơi tôi nghĩ rằng tôi đã gõ một ký tự (ví dụ như backtick) nhưng thay vào đó đã gõ một cái khác trông giống như nó.
Tôi thực sự đang tạo chuỗi (theo hiểu của tôi, tại thời gian biên dịch), trình duyệt nên không phải đang cố coi nó là HTML hoặc theo bất kỳ cách nào phân tích cú pháp. Vì vậy, những gì cho?
Một số trình duyệt ngừng phiên dịch Javascript trên ''. Hãy loại bỏ hoặc thay thế bằng '<\/SCRIPT>'. –
(Lưu ý rằng điều này bị lừa đảo trên SO.) –
@Gothdo \t Không biết cái nào là "tốt nhất", ví dụ: http://stackoverflow.com/questions/30231151/syntaxerror-unterminated-string-literal- script-script-tag-not-working-wi, http://stackoverflow.com/q/26691529/438992, http://stackoverflow.com/q/31153809/438992, http://stackoverflow.com/q/ 17344196/438992, http://stackoverflow.com/q/2170609/438992, http://stackoverflow.com/q/11945771/438992, http://stackoverflow.com/q/10154514/438992, v.v. –