2009-07-01 9 views
10

मैं (प्रोटोटाइप पुस्तकालय मैं उपयोग कर रहा हूँ) निम्न करने के लिए कोशिश कर रहा हूँ में एक स्ट्रिंग innerHTML करने के लिए एक स्क्रिप्ट टैग युक्त नहीं जोड़ सकते हैं दूसरी लाइन में संपत्ति सेट करने के बाद संपत्ति हमेशा "" के बराबर होती है।क्यों मैं IE

यह स्निपेट एक फ़ंक्शन के अंदर है जो बाहरी विक्रेता स्क्रिप्ट में document.write() को ओवरराइड कर रहा है, इसलिए मैं इसे स्क्रिप्ट तत्व बनाने और सीधे div तत्व में जोड़ने के बजाय ऐसा कर रहा हूं।

किसी भी मदद की वास्तव में सराहना की जाएगी, यह मुझे ग्रे बाल दे रहा है!

+0

(+1) अच्छा सवाल से बच चार का उपयोग करने की जरूरत है। पहले विकल्प के लिए –

उत्तर

6

आप इस के बजाय की तरह कुछ करने के लिए कोशिश कर सकते:

function loadScript(src) { 
     var script = document.createElement("script"); 
     script.type = "text/javascript"; 
     document.getElementsByTagName("head")[0].appendChild(script); 
     script.src = src; 
} 

या आपका स्क्रिप्ट टैग शायद स्वतंत्र रूप से व्याख्या की जा करने के लिए प्रबंध कर रहा है

.. 
div.innerHTML = "<script src=\"somescript.js\"></script>"; 
.. 
+4

+1। –

+0

मैं भी पहला पसंद करता हूं। यह बहुत साफ और पुन: प्रयोज्य है। वे 2 केवल "कोशिश करें" सुझाव थे अगर वह 1 दृष्टिकोण का उपयोग नहीं करना चाहते हैं :) – Juri

+0

मुझे अस्पष्ट महसूस है कि ओपी की समस्या वास्तव में काम पर एक सुरक्षा सुविधा है और आपका पहला जवाब पारंपरिक है (और गैर-अवरुद्ध!) समाधान। – annakata

1

क्या आपने .js फ़ाइल लोड करने के बजाय इनलाइन जेएस जोड़ने की कोशिश की है? मैंने अतीत में ऐसा किया है और यह मेरे लिए ठीक काम करता है। निश्चित नहीं है कि यह अभी भी सबसे लंबे ब्राउज़र/सुरक्षा मिस्री के साथ काम करेगा।

एचटीएच।

7

है। प्रयास करें:

div.innerHTML = '<scr' + 'ipt src="somescript.js"></scr' + 'ipt>'; 
+0

कोड में स्क्रिप्ट टैग का उपयोग करने में यह एक आम समस्या है और यहां समस्या बहुत अधिक है – jcoder

+0

यह दिलचस्प है। क्या आप विस्तार से समझा सकते हैं? – bitsprint

+0

+1 यह मुझे समस्या की तरह लगता है। – RedFilter

11

यह भी मुझे थोड़ा के लिए भी stymied था। यह पता चला है कि आईई सीधे जेएसएल को आंतरिक HTML के माध्यम से सम्मिलित करने की अनुमति नहीं देता है जब तक कि आप 'defer' प्रॉपर्टी को शामिल न करें (नीचे दूसरा लिंक देखें)। यह संपत्ति आईई के लिए अद्वितीय है और जाहिर है कि आईई को अन्य मार्कअप लोड होने के बाद तक किसी भी जेएस के निष्पादन को स्थगित करने की अनुमति मिलती है। एक चेतावनी, यद्यपि ... यदि आप दो स्क्रिप्ट टैग (जैसे मैंने किया) शामिल करते हैं, तो कोई गारंटी नहीं है कि कोई पहले निष्पादित करेगा, क्योंकि स्क्रिप्ट को असीमित रूप से लोड किया जा रहा है। यह केवल एक समस्या होनी चाहिए यदि आपकी स्क्रिप्ट एक-दूसरे पर निर्भर हैं (जैसा कि मेरा था)।

एक अतिरिक्त चेतावनी भी है ... आपको स्क्रिप्ट डालने के साथ ही गैर-स्क्रिप्ट मार्कअप डालना होगा। मैं 'defer' संपत्ति के साथ या उसके बिना, स्क्रिप्ट टैग को स्वयं से सम्मिलित करने में असमर्थ था। अंत में, स्क्रिप्ट टैग को अन्य सभी गैर-स्क्रिप्ट मार्कअप डालने के बाद रखा जाना चाहिए। अन्यथा, स्क्रिप्ट टैग डाले गए HTML से अलग हो जाते हैं।,

http://msdn.microsoft.com/en-us/library/ms533719%28v=vs.85%29.aspx

कोड के माध्यम से स्क्रिप्ट सम्मिलित का उदाहरण (हाँ:

एमएस innerHTML संदर्भ::

http://msdn.microsoft.com/en-us/library/ms533897%28v=vs.85%29.aspx

एमएस आस्थगित करें संपत्ति संदर्भ

यहाँ कुछ संदर्भ हैं यह वास्तव में काम करता है):

http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/insertScript_2.htm

मेरे टेस्ट कोड:

// I downloaded the MS example file above and tweaked their script a bit, 
// resulting in this. Using the proper approach to the defer property 
// (namely: defer="defer") did not provide me with consistent results, so 
// sticking with 'DEFER' may be necessary. 
// Note: Try moving the 'sHTML' variable to the end of the script string. 
function insertScript2() 
{ 
    var sHTML="<input type=button onclick=" + "go2()" + " value='Click Me'><BR>"; 
    var sScript = sHTML + "<SCRIPT DEFER type='text/javascript'> function go2(){ alert('Hello from inserted script.') } </SCRIPT" + ">"; 
    ScriptDiv.innerHTML = sScript; 
}