2015-02-09 7 views
9

यह मेरे परीक्षणों से लगता है कि जावास्क्रिप्ट पर किसी भी प्रभाव के बिना डीओएम से एक स्क्रिप्ट टैग हटाया जा सकता है।
यह परीक्षण स्क्रिप्ट डीओएम नोड्स निष्पादन के माध्यम से भाग मार्ग को नष्ट कर देता है। यहां तक ​​कि इसका स्क्रिप्ट पर कोई प्रभाव नहीं पड़ता है, परिवर्तनीय count को 1 के बाद मान दिया गया है कि स्क्रिप्ट टैग को DOM से हटा दिया गया है।क्या एक HTML स्क्रिप्ट टैग को हटाने से जावास्क्रिप्ट पर कोई प्रभाव पड़ता है?

<!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> 

उपयोग केस मेजबान साइट से इंजेक्शन वाले तृतीय-पक्ष स्क्रिप्ट तत्वों को सुरक्षित रूप से हटा रहा है।

+6

जब जावास्क्रिप्ट पार्स किया गया है, यह वैश्विक क्षेत्र (खिड़की वस्तु) को जोड़ा गया है। तो तत्व सिर्फ एक पाठ कंटेनर है। – Mouser

+0

एक बार जावास्क्रिप्ट निष्पादित हो जाने पर, यह स्क्रिप्ट को हटाने के लिए उतना आसान नहीं है जितना इसे निष्पादित करने के लिए – adeneo

उत्तर

6

उस समय तक की सामग्री निष्पादित कर रही है कि वे पहले से ही डीओएम से प्राप्त किए गए हैं, जावास्क्रिप्ट इंजन में लोड किए गए हैं, और पार्स किए गए हैं। डोम में पाठ, क्रियान्वित कोड से जुड़ा किसी भी तरह से नहीं रह गया है as required by the HTML 5 specification:

1. स्क्रिप्ट ब्लॉक के स्रोत प्रारंभ इस प्रकार है:
...
तो स्क्रिप्ट इनलाइन और the script block's type एक टेक्स्ट-आधारित भाषा
उस समय टेक्स्ट आईडीएल विशेषता का मान तत्व के "already started" ध्वज को अंतिम सेट स्क्रिप्ट स्रोत था।
...
4. the script block's source का उपयोग करके एक स्क्रिप्ट बनाएं, जिस URL से स्क्रिप्ट प्राप्त की गई थी, स्क्रिप्ट ब्लॉक का प्रकार स्क्रिप्टिंग भाषा के रूप में, और स्क्रिप्ट तत्व के दस्तावेज़ की विंडो ऑब्जेक्ट की स्क्रिप्ट सेटिंग्स ऑब्जेक्ट।
...
नोट: यह वह जगह है जहां लिपि संकलित और वास्तव में निष्पादित की जाती है।

भी देखें: http://www.w3.org/TR/html5/webappapis.html#creating-scripts

संबंधित मुद्दे