2008-11-24 16 views
9

बड़ी, उच्च लोड परियोजना पर काम करना मुझे समस्या मिली है जो मंचों और ब्लॉग पर अरबों विषयों में पहले ही वर्णित है, लेकिन मेरे पास कोई समाधान नहीं है जो मेरे मामले में मदद करेगा। कहानी यहाँ है।बाहरी जेएस फ़ाइल में जावास्क्रिप्ट दस्तावेज़.write

मेरे पास बैनर का HTML कोड है, मुझे नहीं पता कि कोड क्या है। कभी-कभी यह सादा HTML है, लेकिन कभी-कभी <script> टैग के साथ document.write के साथ <script> टैग के साथ टैग है जिसमें उसमें नेटवर्क को डबलक्लिक करने के लिए src है।

तो हमारे पास है: script> document.write> script (doubleclick)।

डबलक्लिक नेटवर्क, जैसा कि आप जानते हैं, दस्तावेज़.write का भी उपयोग करें और अधिकांश समय वे फ्लैश बैनर देते हैं जिन्हें एक और जेएस फ़ाइल लोड करने की आवश्यकता होती है।

तो सब के बाद हमने: script> दस्तावेज़.लिखें> लिपि (DoubleClick)> दस्तावेज़.लिखें> script> ...

यह अच्छा काम करता है जब आप सीधे HTML में रखें। पृष्ठ प्रतिपादन 1 भाग, लोड बैनर 1, प्रतिपादन पृष्ठ रखें, बैनर 2 लोड करें, पृष्ठ प्रतिपादन को अंतिम रूप दें।

लेकिन अभी मुझे उस पृष्ठ बैनर के बाद पहले पृष्ठ प्रस्तुत करना होगा। बैनर document.write का उपयोग करते जैसा कि मैंने पहले window.onload घटना इसे लोड करने की आवश्यकता है (ध्यान दें: के बाद window.onload दस्तावेज़.लिखें पूरे दस्तावेज़ को फिर से लिखने होंगे।)

मैंने क्या किया है:

सिर में खंड में मेरे पास एक बैनर ऑब्जेक्ट है (असली नामस्थान विशाल :) :), संपत्ति के दायरे के साथ।

पृष्ठ प्रतिपादन और बैनर कोड से मिलने मैं गुंजाइश में बैनर के कोड डालते हैं और <div id="bannerPlaceHolder"+id></div> डाल है जब - तो यहाँ मैं पर

पृष्ठ प्रदान की गई और </body> टैग मैं डाल से पहले बाद में बैनर सामग्री डाल करने की आवश्यकता होगी <script>banners.load()</script> banners.load विधि गुंजाइश सरणी में प्रत्येक आइटम के लिए ऐसा करते हैं:

document.write('<div id="codeHolder'+id+'">'); 
document.write(bannerCode); 
document.write('</div>'); 

और इस के बाद ही मैं window.onload() घटना है कि ऐसा करते हैं:

ले सभी बैनर ग odeHolders और node-by-node इसे कोड से नोड्स को जोड़ने के लिए होल्डर होल्डर, इसलिए परिणामस्वरूप मैंने पृष्ठ को प्रस्तुत करने के बाद बैनर लोड किए हैं और बैनर सही जगह पर हैं।

आईई को छोड़कर सभी सही है, यह किसी भी जेएस स्क्रिप्ट को लोड करता है जो डीओएम में गतिशील रूप से एसिंक्रोन तरीके से लगाया जाता है, इसलिए डबलक्लिक स्क्रिप्ट के अंदर document.write दस्तावेज़ के अंत में नोड्स संलग्न करता है और मेरे कोडहोल्डर नोड्स में नहीं। हमेशा के रूप में यह केवल आईई में है।

मुझे वास्तव में किसी भी व्यक्ति की सराहना की जाएगी जो समाधान को जान सके।

उत्तर

0

शायद आप आंतरिक HTML: दस्तावेज़.getElementById ("x") का उपयोग कर सकते हैं। आंतरिक HTML = ".................";

या आप आप डोम किए जा सकेंगे: CreateElement और appendChild

+0

innerHTML <'script> टैग में कोड निष्पादित नहीं करता है गतिशील रूप से मैं html कोड आता है कि –

+0

नियंत्रित नहीं किया जा सकता है टैग के बीच और गतिशील रूप से पिछली टिप्पणी में नई लाइन होना चाहिए के रूप में स्क्रिप्ट नहीं बना सकते –

1
आमतौर पर बैनर आप सटीक आयाम और स्थान पता चल जाएगा साथ

, तो कैसे सामग्री किया जा रहा है कि तुम क्या bannerCode में है और बस इतना ही है साथ गतिशील रूप से एक iframe बनाने के बारे में ।

0

लोड यह एक छिपा हुआ (आकार 0x0) iframe में है, तो यह कहीं और ले जाते जावास्क्रिप्ट

0

मुझे लगता है कि आइफ्रेम समाधान बदसूरत है के साथ। आप बैनर को एक अलग पृष्ठ में क्यों लोड नहीं कर सकते हैं और उन्हें डीएवी में AJAX कर सकते हैं?

0

स्प्लिट document.write() - अलग -tags में कॉल, इसलिए उत्पादन तरह दिखना चाहिए:

document.write (''); document.write (बैनरकोड);

document.write ('');

आईई दस्तावेज़.write (बैनरकोड) के लिए इंतजार कर रहा है और बंद होने पर लिखता है।

3

आपको writeCapture.js (पूर्ण प्रकटीकरण: मैं लेखक हूं।) सभी शर्त तृतीय पक्ष स्क्रिप्ट के साथ बंद हैं। आज वे कुछ विशिष्ट HTML उत्पन्न करने के लिए document.write का उपयोग करते हैं, लेकिन कल वे इसे बदल सकते हैं और document.write को बदलने के आधार पर किसी भी साधारण हैक्स को अपडेट करने की आवश्यकता होगी। लिखना कैप्चर इसका ख्याल रखता है। आपके उपयोग होगा कुछ की तरह:

$('#bannerPlaceHolder').writeCapture().html('<script type="text/javascript" src="http://doubleclick.net/bannerCode.js"></script>'); 

पुस्तकालय स्क्रिप्ट टैग के किसी भी मनमाने ढंग से गहराई संभालने के लिए और फैले होना HTML के साथ ठीक करता है सकते हैं। यदि आप jQuery का उपयोग नहीं करते हैं तो यह एक स्टैंडअलोन बिल्ड भी है।