2011-06-21 14 views
10

मैं जावास्क्रिप्ट कोड चलाने के लिए मौजूदा डोम में एक तत्व जोड़ना चाहता हूं।DOM को <script> तत्व जोड़ना और जावास्क्रिप्ट चलाएं?

मैं YUI के साथ ऐसा किया:

var scriptNode = Y.Node.create('<script type="text/javascript" charset="utf-8">alert("Hello world!");<\/script>'); 
var headNode = Y.one('head'); 
headNode.append(scriptNode); 

यह सफलतापूर्वक डोम को जोड़ा गया है, लेकिन यह मुझे एक चेतावनी नहीं देता है।

कोई जानता है कि समस्या क्या है?

+0

कोई कारण नहीं है कि आप सीधे जेएस नहीं चलाते हैं? –

+0

क्या आपके नियंत्रण में जावास्क्रिप्ट 'स्क्रिप्ट नोड' में है? इसे एक समारोह में लपेटें और इसे जोड़ने के बाद इसे कॉल करें? बस यह पाया - उचित और जानकारीपूर्ण लगता है: http://stackoverflow.com/questions/610995/jquery-cant-append-script-element/3603496#3603496 –

+0

आपके समापन टैग में अतिरिक्त '\' है, यह होना चाहिए, यह सुनिश्चित नहीं है कि यह – sharpper

उत्तर

35

मुझे नहीं पता कि कैसे YUI का Node.create() फ़ंक्शन काम करता है, इसलिए उस पर कोई टिप्पणी नहीं है। लेकिन एक साधारण पार ब्राउज़र स्क्रिप्ट है:

window.onload = function() { 
    var s = document.createElement('script'); 
    s.type = 'text/javascript'; 
    var code = 'alert("hello world!");'; 
    try { 
     s.appendChild(document.createTextNode(code)); 
     document.body.appendChild(s); 
    } catch (e) { 
     s.text = code; 
     document.body.appendChild(s); 
    } 
    } 

try..catch ब्लॉक पहली विधि की तरह अधिकांश ब्राउज़र के रूप में आवश्यक है, लेकिन कुछ नहीं करते हैं और एक त्रुटि फेंक देते हैं। दूसरी विधि उनको शामिल करती है। आप आसानी से eval कोड भी दे सकते हैं, जो कम या ज्यादा समकक्ष है और कुछ पुस्तकालय क्या करते हैं।

+2

क्या आप अंततः खंड के तहत document.body.appendChild (ओं) डाल नहीं सकते? –

+0

हां, यह ठीक है क्योंकि टेक्स्ट नोड को स्क्रिप्ट तत्व में जोड़कर त्रुटि होती है। – RobG

1

मुझे यह कार्य JQuery स्रोत में मिला, जो आपको लगता है कि आप जो चाहते हैं उसे करने के लिए मुझे लगता है और मुझे अन्य दृष्टिकोणों की तुलना में थोड़ा क्लीनर लगता है। लेकिन फिर मैं एक जेएस शुरुआती हूं और शायद विवरण नहीं देखता हूं। वैसे भी, कोई इससे कुछ उपयोगी ले सकता है।

function DOMEval(code, doc) { 
    doc = doc || document; 

    var script = doc.createElement("script"); 

    script.text = code; 
    doc.head.appendChild(script).parentNode.removeChild(script); 
} 
+0

निकालें किल्ड कॉल के साथ क्या है? क्या आप उस स्क्रिप्ट को नहीं हटाएंगे जिसे आपने अभी जोड़ा है? क्या कोई चाल है जो मुझे याद आ रही है? – Danger

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