2015-02-09 16 views
9

Có vẻ như từ các thử nghiệm của tôi rằng một thẻ tập lệnh có thể bị xóa khỏi DOM mà không có bất kỳ tác động nào lên JavaScript mà nó chứa.
Thử nghiệm này phá hủy các nút DOM của tập lệnh cách một phần thông qua thực thi. Ngay cả điều này không ảnh hưởng đến tập lệnh, biến số count được gán giá trị 1sau thẻ tập lệnh đã bị xóa khỏi DOM.Việc xóa thẻ tập lệnh HTML có ảnh hưởng đến JavaScript mà nó chứa không?

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<title> Test </title> 

<script id="jQueryScriptTag" src="https://code.jquery.com/jquery-1.11.2.min.js"></script> 

</head> 
<body> 

<button id="testBtn">Click to test</button> 

<div id="output"></div> 

<script id="testCodeScriptTag"> 
    var count; 

    $("#jQueryScriptTag").remove(); 
    $("#testCodeScriptTag").remove(); 
    $("#output").append(
     "<p>jQueryScriptTag is " + document.getElementById("jQueryScriptTag") + "</p>" + 
     "<p>testCodeScriptTag is " + document.getElementById("testCodeScriptTag") + "</p>" + 
     "<p>count is " + count + "</p>" 
    ); 

    count = 1; 

    $("#testBtn").click(function(){ 
     $("#output").append(
      "<p>count is " + (count++) + "</p>" 
     ); 
    }); 

</script> 

</body> 
</html> 

Trường hợp sử dụng loại bỏ an toàn các phần tử tập lệnh bên thứ ba được chèn vào từ trang chủ.

+6

Khi Javascript được phân tách, nó được thêm vào phạm vi toàn cầu (đối tượng cửa sổ). Vì vậy, phần tử chỉ là một vùng chứa văn bản. – Mouser

+0

Sau khi javascript được thực hiện, nó không phải là dễ dàng như chỉ cần loại bỏ các kịch bản để làm cho nó un-thực hiện – adeneo

Trả lời

6

Khi nội dung của đang thực hiện chúng đã được tìm nạp từ DOM, được nạp vào công cụ JavaScript và được phân tích cú pháp. Các văn bản trong DOM là không còn cách nào kết nối với mã thực thi, as required by the HTML 5 specification:

1. Khởi nguồn khối kịch bản như sau:
...
Nếu kịch bản là nội tuyến và the script block's type là một ngôn ngữ dựa trên văn bản
Giá trị của thuộc tính IDL văn bản tại thời điểm cờ "already started" của phần tử là tập cuối cùng là nguồn tập lệnh.
...
4. Tạo tập lệnh, sử dụng the script block's source, URL mà tập lệnh được lấy, loại tập lệnh chặn làm ngôn ngữ kịch bản và đối tượng cài đặt tập lệnh của đối tượng Window của tài liệu kịch bản.
...
Lưu ý: Đây là nơi tập lệnh được biên dịch và thực thi.

Xem thêm: http://www.w3.org/TR/html5/webappapis.html#creating-scripts

Các vấn đề liên quan