गतिशील रूप से प्रोटोटाइप का उपयोग कर एक js फ़ाइल लोड?

वोट
2

मैं प्रोटोटाइप का उपयोग कर रहा बाहरी जे एस फ़ाइल को लोड करने गतिशील (वास्तव में यह php फ़ाइल है)। इस कदर:

function UpdateJS(file)
{
  var url    = 'main_js.php?file='+file;
  var myAjax = new Ajax.Request( url, {method: 'get', onComplete: showResponseHeader} );
}
function showResponseHeader (originalRequest) 
{
  $('jscode').innerHTML = originalRequest.responseText;
}

कंटेनर jscode इस तरह परिभाषित किया गया है:

<script type=text/javascript id=jscode></script>

और यह काम करता है! लेकिन अगर कुछ अलग फ़ाइल कहा जाता है, पिछले एक से सभी कार्यों संरक्षित कर रहे हैं। और मुझे लगता है कि नहीं करना चाहती। कोई भी जानता है कि कैसे उतारना करने के लिए पहले js फ़ाइल जब दूसरा एक कहा जाता है?

(मैं भी Ajax.Updater समारोह का उपयोग कर की कोशिश की लेकिन परिणाम एक ही है।)

अपडेट: ऐसा लगता है बड़ा समस्या है: यह केवल लोड करता है, तो समारोह UpdateJS window.onload है यही कारण है कि यह उस के बाद कुछ और लोड नहीं करता है। तो प्रोटोटाइप अद्यतन यह शायद इस लिए इस तरह के एक अच्छा तरीका नहीं है ...

05/04/2009 को 15:49
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
1

मुझे नहीं लगता कि आप एक फ़ाइल के दायरे के भीतर परिभाषित सम्पत्तियों का एक समूह अनलोड कर सकते हैं करते हैं। का संभावित हल के लिए एक केंद्रीय उद्देश्य यह है कि आप स्क्रैप में काम करता है प्रत्येक फ़ाइल में निहित परिभाषित करते हैं (या ओवरराइड) जब भी आपको इसकी से छुटकारा पाने के लिए चाहते हो जाएगा।

05/04/2009 को 15:55
का स्रोत उपयोगकर्ता

वोट
2

वहाँ कैसे गतिशील रूप से जावास्क्रिप्ट और सीएसएस यहाँ अनलोड करने के लिए पर एक बड़ा ट्यूटोरियल है:

http://www.javascriptkit.com/javatutors/loadjavascriptcss2.shtml

नीचे दिए गए कोड ऊपर के लिंक से लिया गया है, यह एक शुद्ध जे एस समाधान, न कि एक प्रोटोटाइप जे एस से एक है, लेकिन चाल करना चाहिए:

function removejscssfile(filename, filetype){
 var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none" //determine element type to create nodelist from
 var targetattr=(filetype=="js")? "src" : (filetype=="css")? "href" : "none" //determine corresponding attribute to test for
 var allsuspects=document.getElementsByTagName(targetelement)
 for (var i=allsuspects.length; i>=0; i--){ //search backwards within nodelist for matching elements to remove
  if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1)
   allsuspects[i].parentNode.removeChild(allsuspects[i]) //remove element by calling parentNode.removeChild()
 }
}

removejscssfile("somescript.js", "js") //remove all occurences of "somescript.js" on page
removejscssfile("somestyle.css", "css") //remove all occurences "somestyle.css" on page

आप सीएसएस को हटाने की कार्यक्षमता की जरूरत नहीं है, मुझे यकीन है कि आप इसे दूर हैक कर सकते हैं।

05/04/2009 को 16:09
का स्रोत उपयोगकर्ता

वोट
0

निम्नलिखित का प्रयास करें:

function UpdateJS(file)
{
  $('jscode').innerHTML = '';  /*YOU NEED TO RESET THIS*/
  var url    = 'main.js'; /*YOU CAN USE A JAVASCRIPT FILE*/
  var myAjax = new Ajax.Request( url, {method: 'get', onComplete: showResponseHeader} );
}
function showResponseHeader (originalRequest) 
{
  $('jscode').innerHTML = originalRequest.responseText;
}
13/05/2010 को 17:26
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more