2011-08-31 13 views
5

इस कोड काम नहीं करता:लागू document.write()

<div class="pix"><div id="addTimestamp"></div></div> 
<script type="text/javascript"> 
(function() { 
    var date = new Date(), 
     timestamp = date.getTime(), 
     newScript = document.createElement("script"); 

    newScript.type = 'text/javascript'; 
    newScript.src = 'someUrl=' + timestamp + '?'; 
    document.getElementById('addTimestamp').appendChild(newScript); 
}()) 
</script> 

गतिशील स्क्रिप्ट document.write(someCode which loads banners) कहते हैं। लेकिन Firebug में मैं एक त्रुटि है:

Invoking document.write() from asynchronously-loaded external script was ignored.

+0

आपको जवाबों में से एक को – rmflow

उत्तर

4

इस जोड़ें:

newScript.async = false; 

आपकी स्क्रिप्ट काम करने के लिए document.write() के लिए तुल्यकालिक लोड करने के लिए (https://developer.mozilla.org/En/HTML/Element/Script#attr-async देखें) की जरूरत है। जैसा कि आपके पास है, जब भी ब्राउजर के पास समय होता है तब स्क्रिप्ट लोड हो जाएगी - ताकि आप यह नहीं जान सकें कि document.write() से आपका HTML कहां डाला जाएगा। ब्राउज़र ने खराब मुद्दों को रोकने के लिए अपने document.write() कॉल को अनदेखा करने का निर्णय लिया।

+0

स्वीकार नहीं करना चाहिए, हालांकि 100% क्रॉस-ब्राउज़र समाधान नहीं है। document.write हमेशा एक सिरदर्द है और छुटकारा पाने के लिए बेहतर है। इसके अलावा, ऐसा लगता है, गतिशील लोडिंग वाले सभी कर्मचारियों को सिंक लोडिंग को रोकने के लिए बिल्कुल लागू किया गया था। – shabunc

1

दस्तावेज़ लेखन जावास्क्रिप्ट HTML पार्सर का कारण बनता है जब देखकर

document.getElementById('addTimestamp').innerHTML = '<script type="text/javascript"  src="someUrl=' + timestamp + '?"' + 'charset="utf-8"></sc' + 'ript>'; 

कोशिश लेकिन यदि आप में डोम में आप भी कुछ होने के लिए डोम भरी हुई है जरूरत है एक स्क्रिप्ट टैग सम्मिलित करना चाहते हैं विफल।

0

लेवॉन, ऐसा लगता है कि आप पृष्ठ लोड गति के साथ समस्याओं को दूर करने की कोशिश कर रहे हैं (मुझे अन्य कारणों को नहीं दिख रहा है कि वे केवल स्क्रिप्ट को स्थगित न करें)।

व्लादिमीर का जवाब अच्छा और मान्य है, लेकिन मेरे उत्तर पर मेरी टिप्पणी देखें।

एक और दृष्टिकोण, जो काम करता है, लेकिन बहुत सावधानीपूर्वक लागू किया जाना चाहिए, दस्तावेज़ को ओवरराइट करना है। खुद को लिखना। यह बहुत, बहुत, सूक्ष्म काम है, इसे पूरी तरह से परीक्षण करने की आवश्यकता है, लेकिन यह वास्तव में किया जा सकता है। Document.write की प्रत्येक कॉल कुछ प्रकार के स्ट्रिंग बफर को स्टोर कर सकती है। फिर, किसी भी तरह से निर्णय लेकर कि यह सभी सामग्री को फ्लश करने का समय है, बस कुछ डीओएम तत्वों में सभी बफर सामग्री डालें।

काम करता है, लेकिन बहुत परेशान है। सबसे अच्छा विकल्प दस्तावेज़ लिखना नहीं है। लिखना बिल्कुल। लेकिन, हां, यह हमेशा विकल्प नहीं है।

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