2010-07-16 14 views
10

¿Existe una línea que podría ejecutar en una consola de JavaScript para descargar y ejecutar un script de JavaScript desde una fuente remota?¿Cómo puedo descargar dinámicamente y ejecutar un script de JavaScript desde una consola de JavaScript?

Estaba buscando para ver si había una buena manera de descargar this script y usarlo para experimentar de forma interactiva en páginas al azar que pueden no tener, por ejemplo, jQuery cargado.

[editar: Soy consciente de que podría crear dinámicamente un elemento de guión, pero hay una manera mejor de hacer esto?]

Respuesta

9

He escrito un pequeño script para eso.

var loadjQuery = function(cb){ 
    if(typeof(jQuery) == 'undefined'){ 
    var scr = document.createElement('script'); 
    scr.setAttribute('type', 'text/javascript'); 
    scr.setAttribute('src', 'http://code.jquery.com/jquery-latest.js'); 

    if(scr.readyState){ 
     scr.onreadystatechange = function(){ 
      if(scr.readyState === 'complete' || scr.readyState === 'loaded'){ 
       scr.onreadystatechange = null; 
       if(cb === 'function'){ 
        args = [].slice.call(arguments, 1); 
        cb.apply(this, args); 
       } 
      } 
     }; 
    } 
    else { 
     scr.onload = function(){ 
      if(cb === 'function'){ 
       args = [].slice.call(arguments, 1); 
       cb.apply(this, args); 
      } 
     }; 
    } 

    var head = document.getElementsByTagName('head')[0]; 
    head.insertBefore(scr, head.firstChild); 
    } 
} 

Esto funciona a través del navegador.

edición

He actualizado el guión como una función con una devolución de llamada. Sinopsis debería ser:

loadjQuery(function(something){ 
    // execute code after library was loaded & executed 
}); 
+0

¡agradable! acabo de probar tu código y funciona bien. Sería encantador si hubiera una manera de cargarlo en Chrome y darle un atajo fácil de usar ... Supongo que ese es el tipo de cosas para las que tendría que escribir una extensión de Chrome. +1. – jkp

+0

'scr.setAttribute ('tipo', 'texto/javascript');' es redundante. Además, puede usar 'scr.src = ...' en lugar de 'scr.setAttribute ('src', ...)'. – James

+0

¿Cuál es la variable "cb"? – Zuks

1
+0

¡problema hay pollo y huevo! Me gustaría poder cargar jQuery en páginas que no lo tienen cargado. En cualquier caso, si pueden hacerlo, es claramente posible, solo creo que están creando dinámicamente elementos de script a menos que haya una mejor manera. – jkp

1

Bueno, es bastante simple para tomar un largo fragmento de código JavaScript y poner todo junto en una línea :)

Este enfoque tiene unas líneas que podría mezclar en un togehter de oneliner (pero supongo que estás buscando una solución más corta). Deberá evaluar el contenido de las dos etiquetas de script para cargar las bibliotecas de Google AJAX, eso es todo. Sin embargo, es posible que necesite hacer una llamada para obtener el primero.

+0

sí, supongo que tienes razón, supongo que eso es exactamente lo que es un bookmarklet :) [edit: ¡alguien me ganó! http://www.learningjquery.com/2006/12/jquerify-bookmarklet - me alegro de haberlo preguntado ahora ...] – jkp

+0

a la derecha, eso es funcionalidad de bookmarklet - lo uso a menudo para incluir firebug lite – Thariama

Cuestiones relacionadas