Skip to content

Instantly share code, notes, and snippets.

@fschwiet
Forked from acdha/bookmarklet-template.js
Created April 21, 2010 05:18
Show Gist options
  • Save fschwiet/373452 to your computer and use it in GitHub Desktop.
Save fschwiet/373452 to your computer and use it in GitHub Desktop.
/*
To avoid polluting the global namespace this uses an anonymous
function which is called with either the URL for an external
JavaScript file or a function. In either case jQuery will be loaded
from the Google CDN before your code is executed so it's free to
depend on jQuery without checking for it and can do things like
jQuery.getScript() to load other components (e.g. jQuery UI),
stylesheets, etc.
*/
(function (target, msg) {
var loader = function() {
// Avoid executing this function twice:
if (arguments.callee._executed) return;
arguments.callee._executed = true;
if (typeof target === "function") {
target();
} else {
jQuery.getScript(target);
}
// Now that we're done with the actual work, let's display a
// confirmation message so the user knows it's ready:
var el = document.createElement('div');
el.style.position='absolute';
el.style.height='30px';
el.style.width='200px';
el.style.margin='0 auto 0 auto';
el.style.top='0';
el.style.left='40%';
el.style.padding='5px 10px 5px 10px';
el.style.backgroundColor='#f99';
el.innerHTML=msg;
document.body.appendChild(el);
window.setTimeout( function() { jQuery(el).fadeOut('slow', function() { jQuery(this).remove(); } ); }, 2500 );
};
if (typeof jQuery !== 'undefined') {
// Nice - this page already uses jQuery!
loader();
} else {
var s = document.createElement('script');
s.type = "text/javascript";
s.setAttribute('src', document.location.protocol + '//ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js');
if (s.addEventListener) { // Mozilla / WebKit
s.addEventListener("load", loader, false);
} else if ("onreadystatechange" in s) { // IE
s.onreadystatechange = function () {
if (this.readyState == 'complete' || this.readyState == 'loaded') { loader(); }
};
} else {
// Chances are if your browser is this old jQuery won't even work but just in case:
window.setTimeout(loader(), 2500);
}
document.getElementsByTagName('head')[0].appendChild(s);
}
// Note the use of document.location.protocol to avoid http/https
// mismatches. Obviously this requires a server such as pantheon which
// can handle either protocol:
})(document.location.protocol + '//path.to.example.com/something.js', "Page Enhanced!");
// If you just need a little jQuery, pass a function instead of the URL to a .js file:
//})(function(){ jQuery('body').append('<p>Hello!</p>'); }, "Page vandalized!");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment