2009-02-26 19 views
23

Estoy incluyendo páginas usando Ajax pero también necesito incluir sus respectivos archivos javascript, que requieren eliminar los archivos javascript anteriores de la memoria al mismo tiempo.¿Cómo puedo descargar dinámicamente un archivo javascript?

¿Cómo puedo descargar los archivos javascript actualmente cargados (así como su código en la memoria) para que pueda cargar los archivos de la nueva página? Lo más probable es que entren en conflicto, por lo que se cargan los archivos javascript de múltiples archivos independientes.

+0

Puede ser necesario cargar y descargar de forma personalizada. – Pacerier

Respuesta

11

Esto realmente suena como si necesitara reevaluar su diseño. O necesita dejar ajax, o no debe tener colisiones en los nombres de sus métodos.

puede revisar este enlace: http://www.javascriptkit.com/javatutors/loadjavascriptcss2.shtml

que proporciona información sobre cómo eliminar el código JavaScript del DOM. Sin embargo, los navegadores modernos dejarán el código en la memoria en el navegador.

+2

facebook utiliza el mismo método y mantiene el código limpio, para que no se mezclen. un código orientado a objetos adecuado sería un buen trabajo, por lo que no entra en conflicto. – Basit

+0

Recogedores de basura modernos de los navegadores. Si se pierden las referencias al código eliminado, eventualmente se convertirá en un candidato para la recolección de basura. –

+0

@ray: "moderno" en relación con mi respuesta fue hace 4 años ... GC no estaba muy bien hecho entonces; Honestamente, no sé si lo están haciendo mejor hoy. – NotMe

8

No, no puedes hacer eso. Una vez que un bloque de JavaScript se carga en el navegador y se ejecuta, se almacena en la memoria del navegador bajo el alcance de la ventana respectiva. No hay forma de descargarlo (sin la actualización/ventana cerrada).

2

En realidad eso es bastante posible. Puede reemplazar un script o elemento de enlace.

function createjscssfile(filename, filetype){ 
if (filetype=="js"){ //if filename is a external JavaScript file 
    var fileref=document.createElement('script') 
    fileref.setAttribute("type","text/javascript") 
    fileref.setAttribute("src", filename) 
} 

else if (filetype=="css"){ //if filename is an external CSS file 
    var fileref=document.createElement("link") 
    fileref.setAttribute("rel", "stylesheet") 
    fileref.setAttribute("type", "text/css") 
    fileref.setAttribute("href", filename) 
} 
    return fileref 
} 

function replacejscssfile(oldfilename, newfilename, filetype){ 
var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none" //determine element type to create nodelist using 
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(oldfilename)!=-1){ 
     var newelement=createjscssfile(newfilename, filetype) 
     allsuspects[i].parentNode.replaceChild(newelement, allsuspects[i]) 
    } 
    } 
} 

debe rellenar los parámetros de nombre de archivo como atributo src y tipo de archivo como "js" o "css"

Creo que no hay necesidad de explicar el código. También has publicado en 2009 pero oye. Tal vez alguien lo necesitará ¿verdad? :)

Todo el crédito va a: http://www.javascriptkit.com/javatutors/loadjavascriptcss2.shtml

Usted puede aprender algunos trucos que hay por cierto.

+14

¿Elimina esto el código de la memoria del navegador, o simplemente elimina la referencia en el html del código? –

+1

@cale_b Esto no lo elimina de la memoria del navegador y por lo tanto no tiene sentido hacer eso. –

+3

Cargue otro archivo js con los mismos nombres de función con el cuerpo vacío que reemplaza la memoria. Probado y funciona –

6

sólo puede namespace su código .. de esa manera a evitar colisiones

var MyJavaScriptCode = {};

MyJavaScriptCode.bla = function() {};

+0

También tenga cuidado con lo que exporta. Puede obtener un gran control utilizando el patrón de módulo: 'window.someModule = (function() {/ * compila los componentes de su módulo aquí */return {someComponent: myComponent, anotherComponent: myOtherComponent};}())'. Por supuesto, solo debe usar RequireJS u otra biblioteca para descargar preocupaciones innecesarias. – Keen

Cuestiones relacionadas