Ví dụ từ nút +1 của Google:
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{"parsetags": "explicit"}
</script>
Thẻ script có một Thuộc tính src và nội dung. Điều này có nghĩa là gì và nó hoạt động như thế nào?
Ví dụ từ nút +1 của Google:
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{"parsetags": "explicit"}
</script>
Thẻ script có một Thuộc tính src và nội dung. Điều này có nghĩa là gì và nó hoạt động như thế nào?
Câu trả lời:
Các trình duyệt khác nhau xử lý điều này khác nhau. Một số chỉ chạy nội dung nếu nội dung srcđược bao gồm mà không có lỗi. Một số chạy nó sau khi cố gắng bao gồm srctập lệnh, bất kể thành công. Vì hành vi này là không đáng tin cậy (và bị cấm trong HTML5 ), nên cần tránh.
Google không dựa vào bất kỳ hành vi cụ thể nào. Vì nội dung chỉ là một đối tượng theo nghĩa đen (một giá trị), việc thực thi nó sẽ không thực sự làm được gì ngoại trừ việc gây ra lỗi im lặng. Mã của Google xem xét nội dung của scriptchính thẻ và điều chỉnh hành vi của thẻ dựa trên đó.
srcthuộc tính có mặt và thực sự không phải là một đối tượng theo nghĩa đen, mã đó sẽ tạo ra SyntaxErrornếu được thực thi, nó chỉ đơn giản là "văn bản JSON" mà tập lệnh sẽ sử dụng của chính nó sau này.
s=document.getElementsByTagName('script'); text = s[s.length-1].innerHTML; Tôi không nghĩ có bất kỳ cách nào để tìm nạp nội dung của nút tập lệnh mà không liên quan đến việc chạm vào DOM .
Nếu một phần tử script có thuộc tính src , nội dung đó phải được bỏ qua, bất kỳ hành vi nào khác là không tuân thủ.
Nó đã được đề xuất trong blog (như là một hack) để đưa nội dung trên các yếu tố khi biết rằng nó sẽ không được đánh giá, sau đó sử dụng phương pháp DOM để có được những nội dung như là một chuỗi và một trong hai eval nó hoặc chèn nó trong một yếu tố kịch bản mới. Cả hai đều không phải là một ý kiến hay.
Theo đặc tả bản nháp HTML5 , <script>các phần tử có srcthuộc tính chỉ nên có mã nhận xét, nhằm cung cấp tài liệu cho tập lệnh. Mặc dù vậy, có vẻ như Google đang tuân thủ đặc điểm kỹ thuật này.
Sau khi tập lệnh được tải, nó sẽ nhìn vào bên trong thẻ tập lệnh của chính nó để truy cập nội dung của nó.
Nó sẽ sử dụng một số mã tương tự như sau:
var scripts = document.getElementsByTagName("script");
var data = eval(scripts[scripts.length - 1].innerHTML);
Được sự cho phép của John Resig .