Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I dynamically download and run a javascript script from a javascript console?

Is there a one-liner I could execute in a javascript console to download and execute a javascript script from a remote source?

I was looking to see if there was a nice way to download this script and use it for experimenting interactively on random pages which may not have say, jQuery loaded.

[edit: I'm aware I could dynamically create a script element but is there a nicer way to do this?]

like image 724
jkp Avatar asked Jul 16 '10 07:07

jkp


2 Answers

Well, it is quite simple to take a long javascript snippet and put it all together into one line :)

This approach takes a few lines you could mix togehter into a oneliner (but i guess you are looking for a shorter solution). You will have to eval the contents of the two script tags to load Google AJAX libraries - that is all. You might need to do a call to get the first one though.

like image 86
Thariama Avatar answered Oct 11 '22 09:10

Thariama


I've written a little script for that.

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);  
   }
}

This works cross-browser.

edit

I've updated that script as a function with a callback. Synopsis should be:

loadjQuery(function(something){
    // execute code after library was loaded & executed
});
like image 22
jAndy Avatar answered Oct 11 '22 10:10

jAndy