2010-09-01 13 views
13

में document.write() s को प्रतिस्थापित करना मैं ऐसी कंपनी के लिए काम करता हूं जो सॉफ्टवेयर लिखता है जो क्लाइंट साइट < स्क्रिप्ट भाषा = "जावास्क्रिप्ट" src = ..... आदि के साथ एम्बेड करती है। हम काफी निर्भर हैं पेज पर तत्वों को लिखने के लिए document.write पर थोड़ा सा। किसी कारण से हमारे ग्राहकों में से एक ने सामग्री-प्रकार "एप्लिकेशन/एक्सएचटीएमएल + एक्सएमएल" का उपयोग करने का विकल्प चुना है, जो क्रोम में document.write() को अनुपयोगी बनाता है।एक xhtml + xml पेज

मुझे समझ में आता है कि यह क्यों है, और यह कि डोम-अनुपालन कोड प्रत्येक तत्व को बनाना चाहिए, इसके गुण सेट करें, यदि आवश्यक हो तो इसे टेक्स्ट नोड से भरें, पाठ नोड को अपने माता-पिता और अभिभावक को कुछ पृष्ठ तत्व से संलग्न करें .. ..

लेकिन यह एक अच्छा कामकाज क्या है जिसके लिए इस जंक की आवश्यकता नहीं है? उसमें लिखने() में इतने सारे तत्व हैं कि परिणामी कोड घृणास्पद होगा यदि हमने नोड्स बनाए और उन्हें कनेक्स या लेगोस या आप के साथ मिलकर एक साथ रखा।

संपादित करें: CDATA का उपयोग कर कोशिश की, लेकिन के रूप में हमारे स्क्रिप्ट एम्बेड भी इस लाइन एक ही पृष्ठ पर एक्सएचटीएमएल पार्सर द्वारा इसी तरह की निंदा की है:

<script language="text/javascript"><![CDATA[document.write('hi');]]></script> 
+1

पहली नज़र में, JSONML - http://jsonml.org/ - ऐसा लगता है कि आप जो चाहते हैं वह करता है, लेकिन चूंकि मैंने इसे अभी गॉगल किया है और इसे देखने में बहुत लंबा समय नहीं लगाया है, मैं नहीं हूं इस जवाब को कॉल करने के लिए पर्याप्त आत्मविश्वास। – Quentin

उत्तर

10
var el = document.createElement('div'); 
el.innerHTML = 'What you used to document.write()'; 
document.body.appendChild(el); 

ध्यान दें कि आप HTML को ठीक करना होगा वैध एक्सएचटीएमएल होने के लिए, लेकिन यह डीओएम मैनिपुलेशन का उपयोग करने के लिए सभी कोड को परिवर्तित करने से बहुत कम काम होना चाहिए।

+0

आंतरिक HTML एक्सएमएल –

+0

में काम नहीं करेगा यह एचटीएमएल वैध xhtml है। उपरोक्त कोड उत्पादन कोड से अनुकूलित किया गया है, और आप पाएंगे कि jQuery टुकड़े बनाने के लिए एक समान तकनीक का उपयोग करता है। टेस्ट पेज: http://pastebin.com/4akXVkv3 – stormsweeper

+0

ठीक है, ऐसा लगता है कि यह सभी आधुनिक ब्राउज़रों के लिए लागू किया गया है और यह HTML5 का हिस्सा है। मैं आपका जवाब टक्कर लूंगा लेकिन जब तक आप इसे संपादित नहीं करते हैं तब तक मैं लॉक हो जाता हूं। –

0

हम jquery का उपयोग कर रहे हैं और समान संगठनों द्वारा आपके द्वारा प्रदान किए गए कोड को फिर से लिखने के लिए टाइमआउट सेट करें।

<script> 
<!-- 
// once all the page has loaded 
$(document).ready(function() 
    { 
     // wait a bit so everything else that runs when the page has loaded loads, then... 
     setTimeout(function() 
     { 
      // ...load the tracking stuff 
      var headerTag = document.getElementsByTagName('head')[0]; 
      var seo_tag = $.createElement(document.location.protocol + "//track.searchignite.com/si/CM/Tracking/ClickTracking.aspx?siclientid=123456&jscript=1", "script"); 
      headerTag.appendChild(seo_tag); 

     }, 20); 
    }); 
// --> 
</script> 

टाइमआउट बाहरी कोड उपयोगकर्ताओं को ब्राउज़र द्वारा लोड किया गया है से पहले हमारे पेज उपयोगकर्ता के लिए उत्तरदायी बनाने के अतिरिक्त लाभ, बहुत उपयोगी बाहरी आपूर्तिकर्ता के सर्वर कभी जाना है यदि: यहाँ खोजें प्रज्वलित से एक उदाहरण है नीचे। हां हम कुछ ट्रैकिंग आंकड़े खो देते हैं लेकिन उपयोगकर्ता अनुभव से समझौता नहीं किया जाता है।

जाहिर है आप JQuery पर भरोसा नहीं कर पाएंगे लेकिन आपको सामान्य विचार मिलता है।

2

शायद आप text/html के आइफ्रेम बना सकते हैं, उसमें सामग्री लिखें, और फिर नोड्स को मुख्य पृष्ठ में वापस आयात करें।

+0

+1 एक बहुत ही रचनात्मक विचार के लिए +1, भले ही स्वीकृत उत्तर शायद आसान हो। फ्रेम में – MatrixFrog

+0

यूआरएल बदलता ब्राउज़र में नहीं दिखाया जाएगा, इसलिए उपयोगकर्ता बुकमार्क के लिए एक विशिष्ट पृष्ठ नहीं जोड़ सकता – cwtuan

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