User:JesseW/BookmarkletsUniversal

From Wikipedia, the free encyclopedia
Jump to: navigation, search

While there are a lot of good bookmarklets out there, they are seperated onto many different sites, typically by creator. I want to remedy this, by listing all the bookmkarklets that I can find in one place, here. You are welcome to help(this is a wiki, after all.)

I'm going to start by listing all the bookmarklet containing sites that I can find, in the list below. Then I'll copy each of their bookmarklets below. I won't use line divisions, to make copying easier, which will unfortunetly make the page horribly wide. If anyone has a better idea how to handle this, I'd love to hear it. JesseW 03:08, 4 Dec 2004 (UTC)

Note The problem of bookmarklet windows being behind main windows in Mozilla has been solved. It currently requires a few small tweaks. See https://bugzilla.mozilla.org/show_bug.cgi?id=232605 for details. YAY!! JesseW 21:56, 10 Dec 2004 (UTC)

One nice tip I found (on gazingus.org) was regarding calling the bookmarklet from within itself, for various recursive purposes. This can be handled by the form: arguments.callee, which refers to the function being called.

Contents

Bookmarklet sites[edit]

Many bookmarklets[edit]

(above, quotes are from [1])

(above descriptions are from [2]

One (or so) bookmarklets[edit]

IE only[edit]

  1. http://www.trylookinghere.com/bookmarklets/bookmarkletintro.htm - "IE Win and IE Mac. Some bookmarklets are taken from other sites and lack attribution."

(quotes are from [3])

Bookmarklets[edit]

squarefree.com/bookmarklets[edit]

Link Bookmarklets[edit]

search links[edit]

javascript:(function(){var x,n,nD,z,i; function htmlEscape(s){s=s.replace(/&/g,'&amp;');s=s.replace(/>/g,'&gt;');s=s.replace(/</g,'&lt;');return s;} function attrQuoteEscape(s){s=s.replace(/&/g,'&amp;'); s=s.replace(/"/g, '&quot;');return s;} x=prompt("show links with this word/phrase in link text or target url (leave blank to list all links):", ""); n=0; if(x!=null) { x=x.toLowerCase(); nD = window.open().document; nD.writeln('<html><head><title>Links containing "'+htmlEscape(x)+'"</title><base target="_blank"></head><body>'); nD.writeln('Links on <a href="'+attrQuoteEscape(location.href)+'">'+htmlEscape(location.href)+'</a><br> with link text or target url containing &quot;' + htmlEscape(x) + '&quot;<br><hr>'); z = document.links; for (i = 0; i < z.length; ++i) { if ((z[i].innerHTML && z[i].innerHTML.toLowerCase().indexOf(x) != -1) || z[i].href.toLowerCase().indexOf(x) != -1 ) { nD.writeln(++n + '. <a href="' + attrQuoteEscape(z[i].href) + '">' + (z[i].innerHTML || htmlEscape(z[i].href)) + '</a><br>'); } } nD.writeln('<hr></body></html>'); nD.close(); } })();

Description 
"Lists all links on the page containing the specified text."
From 
http://www.squarefree.com/bookmarklets/pagelinks.html#search_links
linked images[edit]

javascript:(function(){function I(u){var t=u.split('.'),e=t[t.length-1].toLowerCase();return {gif:1,jpg:1,jpeg:1,png:1,mng:1}[e]}function hE(s){return s.replace(/&/g,'&amp;').replace(/>/g,'&gt;').replace(/</g,'&lt;').replace(/"/g,'&quot;');}var q,h,i,z=open().document;z.write('<p>Images linked to by '+hE(location.href)+':</p><hr>');for(i=0;q=document.links[i];++i){h=q.href;if(h&&I(h))z.write('<p>'+q.innerHTML+' ('+hE(h)+')<br><img src="'+hE(h)+'">');}z.close();})()

Description 
"Opens a window showing all images linked to from the current page. "
From 
http://www.squarefree.com/bookmarklets/pagelinks.html#linked_images
linked pages[edit]

javascript:(function(){var dims,dimarray,wid,hei,dimstring,x,i,z,url; function linkIsSafe(u) { if (u.substr(0,7)=='mailto:') return false; if (u.substr(0,11)=='javascript:') return false; return true; } function htmlEscape(s){s=s.replace(/&/g,'&amp;');s=s.replace(/>/g,'&gt;');s=s.replace(/</g,'&lt;');return s;} dims = prompt('width, height for each frame', '760, 500'); if (dims!=null) { dimarray = dims.split(','); wid = parseInt(dimarray[0]); hei = parseInt(dimarray[1]); dimstring = 'width='+wid+' height='+hei; x = document.links; z = window.open().document; for (i = 0; i < x.length; ++i) { url = x[i].href; if(linkIsSafe(url)) { z.writeln('<p>' + x[i].innerHTML + ' (' + htmlEscape(url) + ')<br><iframe ' + dimstring + ' src="' + url.replace(/"/g, '&quot;') + '">[broken iframe]</iframe></p>'); } } z.close(); } })();

Description 
"Opens a window showing all pages linked to from the current page. "
From 
http://www.squarefree.com/bookmarklets/pagelinks.html#linked_pages
hide visited[edit]

javascript:(function(){var newSS, styles=':visited {display: none}'; if(document.createStyleSheet) { document.createStyleSheet("javascript:'"+styles+"'"); } else { newSS=document.createElement('link'); newSS.rel='stylesheet'; newSS.href='data:text/css,'+escape(styles); document.getElementsByTagName("head")[0].appendChild(newSS); } })();

Description 
"Hides visited links."
From 
http://www.squarefree.com/bookmarklets/pagelinks.html#hide_visited
int/ext links[edit]

javascript:(function(){var i,x; for (i=0;x=document.links[i];++i)x.style.color=["blue","red","orange"][sim(x,location)]; function sim(a,b) { if (a.hostname!=b.hostname) return 0; if (fixPath(a.pathname)!=fixPath(b.pathname) || a.search!=b.search) return 1; return 2; } function fixPath(p){ p = (p.charAt(0)=="/" ? "" : "/") + p;/*many browsers*/ p=p.split("?")[0];/*opera*/ return p; } })()

Description 
"Colors internal links red, external links blue, and in-page links orange. "
From 
http://www.squarefree.com/bookmarklets/pagelinks.html#int/ext_links
open all links[edit]

javascript:(function(){var n_to_open,dl,dll,i; function linkIsSafe(u) { if (u.substr(0,7)=='mailto:') return false; if (u.substr(0,11)=='javascript:') return false; return true; } n_to_open = 0; dl = document.links; dll = dl.length; for(i = 0; i < dll; ++i) { if (linkIsSafe(dl[i].href)) ++n_to_open; } if (!n_to_open) alert ('no links'); else { if (confirm('Open ' + n_to_open + ' links in new windows?')) for (i = 0; i < dll; ++i) if (linkIsSafe(dl[i].href)) window.open(dl[i].href); } })();

Description 
"Opens each link on the page in a new window. "
From 
http://www.squarefree.com/bookmarklets/pagelinks.html#open_all_links
open selected links[edit]

javascript:(function(){var n_to_open,dl,dll,i; function linkIsSafe(u) { if (u.substr(0,7)=='mailto:') return false; if (u.substr(0,11)=='javascript:') return false; return true; } n_to_open = 0; dl = document.links; dll = dl.length; if (window.getSelection && window.getSelection().containsNode) { /* mozilla */ for(i=0; i<dll; ++i) { if (window.getSelection().containsNode(dl[i], true) && linkIsSafe(dl[i].href)) ++n_to_open; } if (n_to_open && confirm('Open ' + n_to_open + ' selected links in new windows?')) { for(i=0; i<dll; ++i) if (window.getSelection().containsNode(dl[i], true) && linkIsSafe(dl[i].href)) window.open(dl[i].href); } } /* /mozilla */ if (!n_to_open) { /*ie, or mozilla with no links selected: this section matches open_all_links, except for the alert text */ for(i = 0; i < dll; ++i) { if (linkIsSafe(dl[i].href)) ++n_to_open; } if (!n_to_open) alert ('no links'); else { if (confirm('No links selected. Open ' + n_to_open + ' links in new windows?')) for (i = 0; i < dll; ++i) if (linkIsSafe(dl[i].href)) window.open(dl[i].href); } } })();

Description 
"Opens each link within the selection in a new window. "
From 
http://www.squarefree.com/bookmarklets/pagelinks.html#open_selected_links
target this window[edit]

javascript:(function(){var x,i; x=document.links; for(i=0;i<x.length;++i) { x[i].target="_self"; } })();

Description 
"Makes links open in the same window (when you click them). "
From 
http://www.squarefree.com/bookmarklets/pagelinks.html#target_this_window
target new windows[edit]

javascript:(function(){var x,i; x=document.links; for(i=0;i<x.length;++i) { x[i].target="_blank"; } })();

Description 
"Makes links open in new windows. "
From 
http://www.squarefree.com/bookmarklets/pagelinks.html#target_new_windows
target new bg windows[edit]

javascript:(function(){function tn(e){e=e?e:window.event; open(this.href); focus(); return false;} var dl=document.links, i; for (i=0;i<dl.length;++i) dl[i].onclick=tn; })();

Description 
"Makes links open in new windows behind the current window. "
From 
http://www.squarefree.com/bookmarklets/pagelinks.html#target_new_bg_windows
target one new window[edit]

javascript:(function(){var x,i,r=Math.random(); x=document.links; for(i=0;i<x.length;++i) { x[i].target=r; } })();

Description 
"Makes links open in one new window. "
From 
http://www.squarefree.com/bookmarklets/pagelinks.html#target_one_new_window
remove redirects[edit]

javascript:(function(){var k,x,t,i,j,p; for(k=0;x=document.links[k];k++){t=x.href.replace(/[%]3A/ig,':').replace(/[%]2f/ig,'/');i=t.lastIndexOf('http');if(i>0){ t=t.substring(i); j=t.indexOf('&'); if(j>0)t=t.substring(0,j); p=/https?\:\/\/[^\s]*[^.,;'">\s\)\]]/.exec(unescape(t)); if(p) x.href=p[0]; } else if (x.onmouseover&&x.onmouseout){x.onmouseover(); if (window.status && window.status.indexOf('://')!=-1)x.href=window.status; x.onmouseout(); } x.onmouseover=null; x.onmouseout=null; }})();

Description 
"Changes redirecting links to go directly to the "real" target. "
From 
http://www.squarefree.com/bookmarklets/pagelinks.html#remove_redirects
hrefs as link text[edit]

javascript:(function(){var i,c,x,h; for(i=0;x=document.links[i];++i) { h=x.getAttribute("href"); x.title+=" " + x.innerHTML; while(c=x.firstChild)x.removeChild(c); x.appendChild(document.createTextNode(h)); } })()

Description 
"Changes the text of links to match their hrefs. "
From 
http://www.squarefree.com/bookmarklets/pagelinks.html#hrefs_as_link_text
full urls as link text[edit]

javascript:(function(){var i,c,x,h; for(i=0;x=document.links[i];++i) { h=x.href; x.title+=" " + x.innerHTML; while(c=x.firstChild)x.removeChild(c); x.appendChild(document.createTextNode(h)); } })()

Description 
"Changes the text of links to match their absolute urls. "
From 
http://www.squarefree.com/bookmarklets/pagelinks.html#full_urls_as_link_text

Form Bookmarklets[edit]

frmget[edit]

javascript:(function(){var x,i; x = document.forms; for (i = 0; i < x.length; ++i) x[i].method="get"; alert("Changed " + x.length + " forms to use the GET method. After submitting a form from this page, you should be able to bookmark the result."); })();

Description 
"Makes "Post" forms submit to bookmarkable URLs (with ?var=value). "
From 
http://www.squarefree.com/bookmarklets/forms.html#frmget
toggle checkboxes[edit]

javascript:(function(){ function toggle(box){ temp=box.onchange; box.onchange=null; box.checked=!box.checked; box.onchange=temp; } var x,k,f,j; x=document.forms; for (k=0; k<x.length; ++k) { f=x[k]; for (j=0;j<f.length;++j) if (f[j].type.toLowerCase() == "checkbox") toggle(f[j]); } })();

Description 
"Toggles the state of each checkbox on the page. "
From 
http://www.squarefree.com/bookmarklets/forms.html#toggle_checkboxes
next option[edit]

javascript:(function(){ function rotate(es) { var i,n=es.length; for (i=0; i<n; ++i) { if(es[i].checked) { es[(i+1) % n].checked=true; break; } } if (i==es.length) es[0].checked=true; } var x,k,f,j,e,B,key; x=document.forms; for (k=0; f=x[k]; ++k) { B=[]; for (j=0;e=f[j];++j) if (e.type && e.type.toLowerCase() == "radio") { key=" "+e.name; if (!B[key]) B[key]=[]; B[key].push(e); } for(key in B) rotate(B[key]) }})()

Description 
"Selects the next option in each group of option buttons. "
From 
http://www.squarefree.com/bookmarklets/forms.html#next_option
allow no option[edit]

javascript:(function(){function down(){bmlRadioValue=this.checked;bmlRadioRef=this;} function click() {if((window.bmlRadioRef==this)&&window.bmlRadioValue) {this.checked=false;bmlRadioRef=null;}}function mU(radio){radio.onmousedown=down; radio.onkeydown=down;radio.onclick=click;}var x,k,f,j;x=document.forms;for (k=0;k<x.length;++k){f=x[k];for(j=0;j<f.length;++j)if(f[j].type.toLowerCase()=="radio")mU(f[j]);}window.status="To unselect a selected option button, click on it or press spacebar."})();

Description 
"Click on a selected option button to clear the selection. "
From 
http://www.squarefree.com/bookmarklets/forms.html#allow_no_option
remove maxlength[edit]

javascript:(function(){var x,k,f,j;x=document.forms;for(k=0;k<x.length;++k){f=x[k];for(j=0;j<f.length;++j)f[j].removeAttribute("maxLength");}})()

Description 
"Removes maxLength restrictions from textboxes. "
From 
http://www.squarefree.com/bookmarklets/forms.html#remove_maxlength
enlarge textareas[edit]

javascript:(function(){var i,x; for(i=0;x=document.getElementsByTagName("textarea")[i];++i) x.rows += 5; })()

Description 
"Makes textareas 5 lines taller. "
From 
http://www.squarefree.com/bookmarklets/forms.html#enlarge_textareas
show hiddens[edit]

javascript:(function(){var i,f,j,e,div,label,ne; for(i=0;f=document.forms[i];++i)for(j=0;e=f[j];++j)if(e.type=="hidden"){ D=document; function C(t){return D.createElement(t);} function A(a,b){a.appendChild(b);} div=C("div"); label=C("label"); A(div, label); A(label, D.createTextNode(e.name + ": ")); e.parentNode.insertBefore(div, e); e.parentNode.removeChild(e); ne=C("input");/*for ie*/ ne.type="text"; ne.value=e.value; A(label, ne); label.style.MozOpacity=".6"; --j;/*for moz*/}})()

Description 
"Shows hidden form elements. "
From 
http://www.squarefree.com/bookmarklets/forms.html#show_hiddens
undisable[edit]

javascript:(function(){var x,k,f,j;x=document.forms;for (k=0;k<x.length;++k){f=x[k];for(j=0;j<f.length;++j){f[j].disabled=false; f[j].readOnly=false;}}})()

Description 
"Enables all form elements. "
From 
http://www.squarefree.com/bookmarklets/forms.html#undisable
character count[edit]

javascript:(function(){var D=document,i,f,j,e;for(i=0;f=D.forms[i];++i)for(j=0;e=f[j];++j)if(e.type=="text"||e.type=="password"||e.tagName.toLowerCase()=="textarea")S(e);function S(e){if(!e.N){var x=D.createElement("span"),s=x.style;s.color="green";s.background="white";s.font="bold 10pt sans-serif";s.verticalAlign="top";e.parentNode.insertBefore(x,e.nextSibling);function u(){x.innerHTML=e.value.length;}u();e.onchange=u;e.onkeyup=u;e.oninput=u;e.N=x;}else{e.parentNode.removeChild(e.N);e.N=0;}}})()

Description 
"Displays a running count of the characters in each textbox. "
From 
http://www.squarefree.com/bookmarklets/forms.html#character_count
view passwords[edit]

javascript:(function(){var s,F,j,f,i; s = ""; F = document.forms; for(j=0; j<F.length; ++j) { f = F[j]; for (i=0; i<f.length; ++i) { if (f[i].type.toLowerCase() == "password") s += f[i].value + "\n"; } } if (s) alert("Passwords in forms on this page:\n\n" + s); else alert("There are no passwords in forms on this page.");})();

Description 
"Shows the contents of password fields. "
From 
http://www.squarefree.com/bookmarklets/forms.html#view_passwords
remember password[edit]

javascript:(function(){var ca,cea,cs,df,dfe,i,j,x,y;function n(i,what){return i+" "+what+((i==1)?"":"s")}ca=cea=cs=0;df=document.forms;for(i=0;i<df.length;++i){x=df[i];dfe=x.elements;if(x.onsubmit){x.onsubmit="";++cs;}if(x.attributes["autocomplete"]){x.attributes["autocomplete"].value="on";++ca;}for(j=0;j<dfe.length;++j){y=dfe[j];if(y.attributes["autocomplete"]){y.attributes["autocomplete"].value="on";++cea;}}}alert("Removed autocomplete=off from "+n(ca,"form")+" and from "+n(cea,"form element")+", and removed onsubmit from "+n(cs,"form")+". After you type your password and submit the form, the browser will offer to remember your password.")})();

Description 
"Makes the browser ignore web site requests to not remember passwords. "
From 
http://www.squarefree.com/bookmarklets/forms.html#remember_password
htmlarea ie[edit]

javascript:(function(){var d=document,i,f,j,t,m,s,u,q;for(i=0;f=d.forms[i];++i)for(j=0;t=f[j];++j)if(t.tagName=="TEXTAREA"&&!t.htmlarea){t.htmlarea=1;t.style.display="none";m=d.createElement("div");m.contentEditable=true;m.innerHTML=t.value;s=m.style;s.overflow="scroll";s.width=500;s.height=250;s.border="2px inset green";t.parentNode.insertBefore(m,t);u=U(m,t);setInterval(u,50);f.attachEvent("onsubmit",u);if(q=f.posttype)q.selectedIndex=1;}function U(m,t){return function(){t.value=m.innerHTML}}})()

Description 
"Lets you edit textareas expecting HTML code as wysiwyg. (IE) "
From 
http://www.squarefree.com/bookmarklets/forms.html#htmlarea_ie
htmlarea moz[edit]

javascript:(function(){for(i=0;f=document.forms[i];++i)for(j=0;t=f[j];++j)if(t.tagName=="TEXTAREA"&&!t.midasified){var m=document.createElement("iframe");t.parentNode.insertBefore(m,t);Midas(m,t.value);m.style.background="white";m.style.width=getComputedStyle(t,"").getPropertyValue("width");m.style.height=getComputedStyle(t,"").getPropertyValue("height");m.style.border="2px inset green";m.oldTextarea=t;t.midasified=true;t.style.display="none";var U=makeUpdate(m);setInterval(U,50);f.addEventListener("submit",U,false);if(q=f.posttype){q.selectedIndex=1;q.style.background="#dfd";}}function makeUpdate(M){return function(){M.oldTextarea.value=M.contentDocument.body.innerHTML;}}function Midas(M,V){M.onload=function(){M.contentDocument.body.innerHTML=V;M.contentDocument.designMode="on";this.onload=function(){M.contentDocument.body.innerHTML=V;}}}})()

Description 
"Lets you edit textareas expecting HTML code as wysiwyg. (Mozilla) "
From 
http://www.squarefree.com/bookmarklets/forms.html#htmlarea_moz

Text and Data Bookmarklets[edit]

highlight[edit]

javascript:(function(){var count=0, text, dv;text=prompt("Search phrase:", "");if(text==null || text.length==0)return;dv=document.defaultView;function searchWithinNode(node, te, len){var pos, skip, spannode, middlebit, endbit, middleclone;skip=0;if( node.nodeType==3 ){pos=node.data.toUpperCase().indexOf(te);if(pos>=0){spannode=document.createElement("SPAN");spannode.style.backgroundColor="yellow";middlebit=node.splitText(pos);endbit=middlebit.splitText(len);middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);++count;skip=1;}}else if( node.nodeType==1&& node.childNodes && node.tagName.toUpperCase()!="SCRIPT" && node.tagName.toUpperCase!="STYLE"){for (var child=0; child < node.childNodes.length; ++child){child=child+searchWithinNode(node.childNodes[child], te, len);}}return skip;}window.status="Searching for '"+text+"'...";searchWithinNode(document.body, text.toUpperCase(), text.length);window.status="Found "+count+" occurrence"+(count==1?"":"s")+" of '"+text+"'.";})();

Description 
"Highlights each occurrence of a search phrase. "
From 
http://www.squarefree.com/bookmarklets/pagedata.html#highlight
highlight regexp[edit]

javascript:(function(){var count=0, text, regexp;text=prompt("Search regexp:", "");if(text==null || text.length==0)return;try{regexp=new RegExp("(" + text +")", "i");}catch(er){alert("Unable to create regular expression using text '"+text+"'.\n\n"+er);return;}function searchWithinNode(node, re){var pos, skip, spannode, middlebit, endbit, middleclone;skip=0;if( node.nodeType==3 ){pos=node.data.search(re);if(pos>=0){spannode=document.createElement("SPAN");spannode.style.backgroundColor="yellow";middlebit=node.splitText(pos);endbit=middlebit.splitText(RegExp.$1.length);middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);++count;skip=1;}}else if( node.nodeType==1 && node.childNodes && node.tagName.toUpperCase()!="SCRIPT" && node.tagName.toUpperCase!="STYLE"){for (var child=0; child < node.childNodes.length; ++child){child=child+searchWithinNode(node.childNodes[child], re);}}return skip;}window.status="Searching for "+regexp+"...";searchWithinNode(document.body, regexp);window.status="Found "+count+" match"+(count==1?"":"es")+" for "+regexp+".";})();

Description 
"Highlights each match for a regular expression. "
From 
http://www.squarefree.com/bookmarklets/pagedata.html#highlight_regexp
zoom images in[edit]

javascript:(function(){ function zoomImage(image, amt) { if(image.initialHeight == null) { /* avoid accumulating integer-rounding error */ image.initialHeight=image.height; image.initialWidth=image.width; image.scalingFactor=1; } image.scalingFactor*=amt; image.width=image.scalingFactor*image.initialWidth; image.height=image.scalingFactor*image.initialHeight; } var i,L=document.images.length; for (i=0;i<L;++i) zoomImage(document.images[i], 2); if (!L) alert("This page contains no images."); })();

Description 
"Doubles the size of each image on the page. "
From 
http://www.squarefree.com/bookmarklets/pagedata.html#zoom_images_in
zoom images out[edit]

javascript:(function(){ function zoomImage(image, amt) { if(image.initialHeight == null) { /* avoid accumulating integer-rounding error */ image.initialHeight=image.height; image.initialWidth=image.width; image.scalingFactor=1; } image.scalingFactor*=amt; image.width=image.scalingFactor*image.initialWidth; image.height=image.scalingFactor*image.initialHeight; } var i,L=document.images.length; for (i=0;i<L;++i) zoomImage(document.images[i],.5); if (!L) alert("This page contains no images."); })();

Description 
"Halves the size of each image on the page. "
From 
http://www.squarefree.com/bookmarklets/pagedata.html#zoom_images_out
zoom layout[edit]

javascript:factor=Math.sqrt(2); if(!window.scale) { scale=1; zW=[]; zH=[]; unitless=/^[0-9.]+$/; function r(N) { w=N.width; h=N.height; if (unitless.test(w)) zW.push([N,w]); if (unitless.test(h)) zH.push([N,h]); var C=N.childNodes,i; for (i=0;i<C.length;++i) r(C[i]); } r(document.body); } scale*=factor; for(i in zW) zW[i][0].width=zW[i][1]*scale; for(i in zH) zH[i][0].height = zH[i][1]*scale; [].v

Description 
"Increases the size of fixed-pixel-size layout elements and images. "
From 
http://www.squarefree.com/bookmarklets/pagedata.html#zoom_layout
view selection[edit]

javascript:(function(){ var d=open().document; d.title="Selection"; if (window.getSelection) { /*Moz*/ var s = getSelection(); for(i=0; i<s.rangeCount; ++i) { var a, r = s.getRangeAt(i); if (!r.collapsed) { var x = d.createElement("div"); x.appendChild(r.cloneContents()); while ((a = x.getElementsByTagName("script")).length) a[0].parentNode.removeChild(a[0]); d.body.appendChild(x); } } } else { /*IE*/ d.body.innerHTML = document.selection.createRange().htmlText; } })();

Description 
"Displays the selection in a new window. "
From 
http://www.squarefree.com/bookmarklets/pagedata.html#view_selection
clone document[edit]

javascript:(function(){var i,nd; function copyChildren(a,b){for(i=0;i<a.childNodes.length;++i) b.appendChild(a.childNodes[i].cloneNode(true));}; nd=window.open().document; nd.open(); nd.close(); /*140681*/ copyChildren(document.getElementsByTagName("head")[0], nd.getElementsByTagName("head")[0]); copyChildren(document.body, nd.body);})();

Description 
"Copies the document into a new window. "
From 
http://www.squarefree.com/bookmarklets/pagedata.html#clone_document
sort table[edit]

javascript:function toArray (c){var a, k;a=new Array;for (k=0; k<c.length; ++k)a[k]=c[k];return a;}function insAtTop(par,child){if(par.childNodes.length) par.insertBefore(child, par.childNodes[0]);else par.appendChild(child);}function countCols(tab){var nCols, i;nCols=0;for(i=0;i<tab.rows.length;++i)if(tab.rows[i].cells.length>nCols)nCols=tab.rows[i].cells.length;return nCols;}function makeHeaderLink(tableNo, colNo, ord){var link;link=document.createElement('a');link.href='javascript:sortTable('+tableNo+','+colNo+','+ord+');';link.appendChild(document.createTextNode((ord>0)?'a':'d'));return link;}function makeHeader(tableNo,nCols){var header, headerCell, i;header=document.createElement('tr');for(i=0;i<nCols;++i){headerCell=document.createElement('td');headerCell.appendChild(makeHeaderLink(tableNo,i,1));headerCell.appendChild(document.createTextNode('/'));headerCell.appendChild(makeHeaderLink(tableNo,i,-1));header.appendChild(headerCell);}return header;}g_tables=toArray(document.getElementsByTagName('table'));if(!g_tables.length) alert("This page doesn't contain any tables.");(function(){var j, thead;for(j=0;j<g_tables.length;++j){thead=g_tables[j].createTHead();insAtTop(thead, makeHeader(j,countCols(g_tables[j])))}}) ();function compareRows(a,b){if(a.sortKey==b.sortKey)return 0;return (a.sortKey < b.sortKey) ? g_order : -g_order;}function sortTable(tableNo, colNo, ord){var table, rows, nR, bs, i, j, temp;g_order=ord;g_colNo=colNo;table=g_tables[tableNo];rows=new Array();nR=0;bs=table.tBodies;for(i=0; i<bs.length; ++i)for(j=0; j<bs[i].rows.length; ++j){rows[nR]=bs[i].rows[j];temp=rows[nR].cells[g_colNo];if(temp) rows[nR].sortKey=temp.innerHTML;else rows[nR].sortKey="";++nR;}rows.sort(compareRows);for (i=0; i < rows.length; ++i)insAtTop(table.tBodies[0], rows[i]);}

Description 
"Lets you sort tables in a web page alphabetically. "
From 
http://www.squarefree.com/bookmarklets/pagedata.html#sort_table
number rows[edit]

javascript:(function(){function has(par,ctag){for(var k=0;k<par.childNodes.length;++k)if(par.childNodes[k].tagName==ctag)return true;} function add(par,ctag,text){var c=document.createElement(ctag); c.appendChild(document.createTextNode(text)); par.insertBefore(c,par.childNodes[0]);} var i,ts=document.getElementsByTagName("TABLE"); for(i=0;i<ts.length;++i) { var n=0,trs=ts[i].rows,j,tr; for(j=0;j<trs.length;++j) {tr=trs[j]; if(has(tr,"TD"))add(tr,"TD",++n); else if(has(tr,"TH"))add(tr,"TH","Row");}}})()

Description 
"Numbers the rows of each table. "
From 
http://www.squarefree.com/bookmarklets/pagedata.html#number_rows
transpose tables[edit]

javascript:(function(){var d=document,q="table",i,j,k,y,r,c,t;for(i=0;t=d.getElementsByTagName(q)[i];++i){var w=0,N=t.cloneNode(0);N.width="";N.height="";N.border=1;for(j=0;r=t.rows[j];++j)for(y=k=0;c=r.cells[k];++k){var z,a=c.rowSpan,b=c.colSpan,v=c.cloneNode(1);v.rowSpan=b;v.colSpan=a;v.width="";v.height="";if(!v.bgColor)v.bgColor=r.bgColor;while(w<y+b)N.insertRow(w++).p=0;while(N.rows[y].p>j)++y;N.rows[y].appendChild(v);for(z=0;z<b;++z)N.rows[y+z].p+=a;y+=b;}t.parentNode.replaceChild(N,t);}})()

Description 
"Turns table rows into columns and vice versa. "
From 
http://www.squarefree.com/bookmarklets/pagedata.html#transpose_tables
bullets to numbers[edit]

javascript:uls=document.getElementsByTagName("ul"); for (i=uls.length-1; i>=0; --i) { oldul = uls[i]; newol = document.createElement("ol"); for(j=0;j<oldul.childNodes.length;++j) newol.appendChild(oldul.childNodes[j].cloneNode(true)); oldul.parentNode.replaceChild(newol, oldul); } void 0

Description 
"Turns bulleted lists into numbered lists. "
From 
http://www.squarefree.com/bookmarklets/pagedata.html#bullets_to_numbers
number lines[edit]

javascript:(function(){var i,p,L,d,j,n; for(i=0; p=document.getElementsByTagName("pre")[i]; ++i) { L=p.innerHTML.split("\r\n"); d=""+L.length; for(j=0;j<L.length;++j) { n = ""+(j+1)+". "; while(n.length<d.length+2) n="0"+n; L[j] = n + L[j]; } p.innerHTML=L.join("<br>");/*join with br for ie*/ } })()

Description 
"Numbers lines in <pre> tags or plain-text documents. "
From 
http://www.squarefree.com/bookmarklets/pagedata.html#number_lines
rot13 selection[edit]

javascript:var coding = "abcdefghijklmnopqrstuvwxyzabcdefghijklmABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLM"; function rot13(t) { for (var r = "",i=0;i<t.length;i++) { character = t.charAt(i); position = coding.indexOf(character); if (position > -1) character = coding.charAt(position + 13); r += character; } return r; } S=window.getSelection(); function t(N) { return N.nodeType == N.TEXT_NODE; } function r(N) { if (t(N)) N.data = rot13(N.data); } for (j=0;j<S.rangeCount;++j) { var g=S.getRangeAt(j), e=g.startContainer, f=g.endContainer, E=g.startOffset, F=g.endOffset, m=(e==f); if(!m||!t(e)) { /* rot13 each text node between e and f, not including e and f. */ q=document.createTreeWalker(g.commonAncestorContainer, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, null, false); q.currentNode=e; for(N=q.nextNode(); N && N != f; N = q.nextNode()) r(N); } if (t(f)) f.splitText(F); if (!m) r(f); if (t(e)) { r(k=e.splitText(E)); if(m)f=k; e=k;} if (t(f)) g.setEnd(f,f.data.length); } void 0

Description 
"Replaces each letter in the selected text with its rot13 equivalent. "
From 
http://www.squarefree.com/bookmarklets/pagedata.html#rot13_selection

Bookmarklets for Zapping Annoyances[edit]

zap plugins[edit]

javascript:(function(){function R(w){try{var d=w.document,j,i,t,T,N,b,r=1,C;for(j=0;t=["object","embed","applet","iframe"][j];++j){T=d.getElementsByTagName(t);for(i=T.length-1;(i+1)&&(N=T[i]);--i)if(j!=3||!R((C=N.contentWindow)?C:N.contentDocument.defaultView)){b=d.createElement("div");b.style.width=N.width; b.style.height=N.height;b.innerHTML="<del>"+(j==3?"third-party "+t:t)+"</del>";N.parentNode.replaceChild(b,N);}}}catch(E){r=0}return r}R(self);var i,x;for(i=0;x=frames[i];++i)R(x)})()

Description 
"Removes java, flash, background music, and third-party iframes. "
From 
http://www.squarefree.com/bookmarklets/zap.html#zap_plugins
zap colors[edit]

javascript:(function(){var newSS, styles='* { background: white ! important; color: black !important } :link, :link * { color: #0000EE !important } :visited, :visited * { color: #551A8B !important }'; if(document.createStyleSheet) { document.createStyleSheet("javascript:'"+styles+"'"); } else { newSS=document.createElement('link'); newSS.rel='stylesheet'; newSS.href='data:text/css,'+escape(styles); document.getElementsByTagName("head")[0].appendChild(newSS); } })();

Description 
"Makes text black on a white background, and makes links blue and purple. "
From 
http://www.squarefree.com/bookmarklets/zap.html#zap_colors
zap cheap effects[edit]

javascript:(function(){var d=document; function K(N,w) { var nn = d.createElement(w), C = N.childNodes, i; for(i=C.length-1;i>=0;--i) nn.insertBefore(C[i],nn.childNodes[0]); N.parentNode.replaceChild(nn,N); } function Z(t,w) { var T = document.getElementsByTagName(t), j; for (j=T.length-1;j>=0;--j) K(T[j],w); } Z("blink", "span"); Z("marquee", "div"); })();

Description 
"Neutralizes <marquee> and <blink>. "
From 
http://www.squarefree.com/bookmarklets/zap.html#zap_cheap_effects
zap events[edit]

javascript:(function(){var H=["mouseover","mouseout","unload","resize"],o=window.opera; if(document.addEventListener/*MOZ*/&&!o) for(j in H)document.addEventListener(H[j],function(e){e.stopPropagation();},true); else if(window.captureEvents/*NS4*/&&!o) { document.captureEvents(-1/*ALL*/);for(j in H)window["on"+H[j]]=null;} else/*IE*/ {function R(N){var i,x;for(j in H)if(N["on"+H[j]]/*NOT TEXTNODE*/)N["on"+H[j]]=null;for(i=0;x=N.childNodes[i];++i)R(x);}R(document);}})()

Description 
"Removes event handlers, killing blind links and exit pop-up ads. "
From 
http://www.squarefree.com/bookmarklets/zap.html#zap_events
zap timers[edit]

javascript:(function() { var c, tID, iID; tID = setTimeout(function(){}, 0); for (c=1; c<1000 && c<=tID; ++c) clearTimeout(tID - c); iID = setInterval(function(){},1000); for (c=0; c<1000 && c<=iID; ++c) clearInterval(iID - c); })()

Description 
"Removes timers that were created with setTimeout or setInterval. "
From 
http://www.squarefree.com/bookmarklets/zap.html#zap_timers
zap[edit]

javascript:(function(){function R(w){try{var d=w.document,j,i,t,T,N,b,r=1,C;for(j=0;t=["object","embed","applet","iframe"][j];++j){T=d.getElementsByTagName(t);for(i=T.length-1;(i+1)&&(N=T[i]);--i)if(j!=3||!R((C=N.contentWindow)?C:N.contentDocument.defaultView)){b=d.createElement("div");b.style.width=N.width; b.style.height=N.height;b.innerHTML="<del>"+(j==3?"third-party "+t:t)+"</del>";N.parentNode.replaceChild(b,N);}}}catch(E){r=0}return r}R(self);var i,x;for(i=0;x=frames[i];++i)R(x)})(); javascript:(function(){var newSS, styles='* { background: white ! important; color: black !important } :link, :link * { color: #0000EE !important } :visited, :visited * { color: #551A8B !important }'; if(document.createStyleSheet) { document.createStyleSheet("javascript:'"+styles+"'"); } else { newSS=document.createElement('link'); newSS.rel='stylesheet'; newSS.href='data:text/css,'+escape(styles); document.getElementsByTagName("head")[0].appendChild(newSS); } })(); javascript:(function(){var d=document; function K(N,w) { var nn = d.createElement(w), C = N.childNodes, i; for(i=C.length-1;i>=0;--i) nn.insertBefore(C[i],nn.childNodes[0]); N.parentNode.replaceChild(nn,N); } function Z(t,w) { var T = document.getElementsByTagName(t), j; for (j=T.length-1;j>=0;--j) K(T[j],w); } Z("blink", "span"); Z("marquee", "div"); })(); javascript:(function(){var H=["mouseover","mouseout","unload","resize"],o=window.opera; if(document.addEventListener/*MOZ*/&&!o) for(j in H)document.addEventListener(H[j],function(e){e.stopPropagation();},true); else if(window.captureEvents/*NS4*/&&!o) { document.captureEvents(-1/*ALL*/);for(j in H)window["on"+H[j]]=null;} else/*IE*/ {function R(N){var i,x;for(j in H)if(N["on"+H[j]]/*NOT TEXTNODE*/)N["on"+H[j]]=null;for(i=0;x=N.childNodes[i];++i)R(x);}R(document);}})(); javascript:(function() { var c, tID, iID; tID = setTimeout(function(){}, 0); for (c=1; c<1000 && c<=tID; ++c) clearTimeout(tID - c); iID = setInterval(function(){},1000); for (c=0; c<1000 && c<=iID; ++c) clearInterval(iID - c); })();

Description 
"Zaps plugins, colors, cheap effects, event handlers, and timers. "
From 
http://www.squarefree.com/bookmarklets/zap.html#zap
zap images[edit]

javascript:(function(){function toArray (c){var a, k;a=new Array;for (k=0; k < c.length; ++k)a[k]=c[k];return a;}var images, img, altText;images=toArray(document.images);for (var i=0; i < images.length; ++i){img=images[i];altText=document.createTextNode(img.alt);img.parentNode.replaceChild(altText, img)}})();

Description 
"Replaces each image with its <a href="http://ppewww.ph.gla.ac.uk/%7Eflavell/alt/alt-text.html">alternate text</a>. "
From 
http://www.squarefree.com/bookmarklets/zap.html#zap_images
linearize[edit]

javascript:(function(){var D=document,e,styles="table,thead,tbody,tr,th,td{display:block!important;}*{width:auto!important;height:auto!important;position:static!important;float:none!important;margin-left:0!important;margin-right:0!important;} img,iframe,embed,object{display:none;} body {margin:4px!important;}"; e=D.createElement('link'); e.rel='stylesheet'; e.href=window.opera ? "javascript:'"+styles+"'" : "data:text/css,"+styles; D.getElementsByTagName("head")[0].appendChild(e)})()

Description 
"Linearizes the text of the page and removes most non-text elements. "
From 
http://www.squarefree.com/bookmarklets/zap.html#linearize
printer friendly[edit]

javascript:(function(){function linkIsSafe(h){return(!/^mailto:/.exec(h)&&!/^javascript:/.exec(h));} var i,x,h; for(i=0;x=document.getElementsByTagName('a')[i];i++) { h=x.innerHTML.toLowerCase(); if(h.indexOf('print')>-1 && h.indexOf('edition')==-1 && h.indexOf('subscri')==-1 && h.indexOf('reprint')==-1 && h.indexOf('slogan')==-1 && linkIsSafe(x.href)) { x.focus();location=x.href;return; }} alert("Can't find link to printer friendly version.");})()

Description 
"Finds and follows a link to a "print-friendly" version of a page. "
From 
http://www.squarefree.com/bookmarklets/zap.html#printer_friendly
zap presentational html[edit]

javascript:(function(){var H=["bgcolor","bgColor","background","color","align","text","alink","vlink"],Y={FONT:1,CENTER:1},d=[],p; function R(N){var a,x,i,t; if(t=N.tagName){ t=t.toUpperCase(); for (i=0;a=H[i];++i)if(N.getAttribute(a))N.removeAttribute(a); for(i=0;x=N.childNodes[i];++i)R(x); if (Y[t])d.push(N); } } R(document.documentElement); for (i=0;N=d[i];++i) { p=N.parentNode; while(N.firstChild)p.insertBefore(N.firstChild,N); p.removeChild(N); } })()

Description 
"Removes most presentational attributes and tags while leaving style sheets intact. "
From 
http://www.squarefree.com/bookmarklets/zap.html#zap_presentational_html
zap style sheets[edit]

javascript:(function(){var i,x;for(i=0;x=document.styleSheets[i];++i)x.disabled=true;})();

Description 
"Disables all style sheets. "
From 
http://www.squarefree.com/bookmarklets/zap.html#zap_style_sheets
zap cookies[edit]

javascript:(function(){C=document.cookie.split("; ");for(d="."+location.host;d;d=(""+d).substr(1).match(/\..*$/))for(sl=0;sl<2;++sl)for(p="/"+location.pathname;p;p=p.substring(0,p.lastIndexOf('/')))for(i in C)if(c=C[i]){document.cookie=c+"; domain="+d.slice(sl)+"; path="+p.slice(1)+"/"+"; expires="+new Date((new Date).getTime()-1e11).toGMTString()}})()

Description 
"Removes cookies set by the site, including cookies with paths and domains. "
From 
http://www.squarefree.com/bookmarklets/zap.html#zap_cookies
zap white backgrounds[edit]

javascript:(function(){function getRGBColor(node,prop){var rgb=getComputedStyle(node,null).getPropertyValue(prop);var r,g,b;if(/rgb\((\d+),\s(\d+),\s(\d+)\)/.exec(rgb)){r=parseInt(RegExp.$1,10);g=parseInt(RegExp.$2,10);b=parseInt(RegExp.$3,10);return[r/255,g/255,b/255];}return rgb;} R(document.documentElement); function R(n){var i,x,color;if(n.nodeType==Node.ELEMENT_NODE && n.tagName.toLowerCase()!="input" && n.tagName.toLowerCase()!="select" && n.tagName.toLowerCase!="textarea"){for(i=0;x=n.childNodes[i];++i)R(x); color=getRGBColor(n,"background-color");if( (typeof(color)!="string" && color[0] + color[1] + color[2] >= 2.8) || (n==document.documentElement && color=="transparent")) { n.style.backgroundColor = "tan";/*Moz 1.0*/ n.style.setProperty("background-color", "tan", "important");/*Moz 1.4 after zap colors*/ } }}})()

Description 
"Changes white and near-white backgrounds to tan. "
From 
http://www.squarefree.com/bookmarklets/zap.html#zap_white_backgrounds
restore context menu[edit]

javascript:(function() { function R(a){ona = "on"+a; if(window.addEventListener) window.addEventListener(a, function (e) { for(var n=e.originalTarget; n; n=n.parentNode) n[ona]=null; }, true); window[ona]=null; document[ona]=null; if(document.body) document.body[ona]=null; } R("contextmenu"); R("click"); R("mousedown"); R("mouseup"); })()

Description 
"Fixes pages that <a href="http://www.dynamicdrive.com/dynamicindex9/noright.htm">disable context menus</a>. "
From 
http://www.squarefree.com/bookmarklets/zap.html#restore_context_menu
restore selecting[edit]

javascript:(function() { function R(a){ona = "on"+a; if(window.addEventListener) window.addEventListener(a, function (e) { for(var n=e.originalTarget; n; n=n.parentNode) n[ona]=null; }, true); window[ona]=null; document[ona]=null; if(document.body) document.body[ona]=null; } R("click"); R("mousedown"); R("mouseup"); R("selectstart"); })()

Description 
"Fixes pages that <a href="http://slackerhtml.tripod.com/dhtml/misc/disabletextselect.html">disable text selection</a>. "
From 
http://www.squarefree.com/bookmarklets/zap.html#restore_selecting
remove redirects[edit]

javascript:(function(){var k,x,t,i,j,p; for(k=0;x=document.links[k];k++){t=x.href.replace(/[%]3A/ig,':').replace(/[%]2f/ig,'/');i=t.lastIndexOf('http');if(i>0){ t=t.substring(i); j=t.indexOf('&'); if(j>0)t=t.substring(0,j); p=/https?\:\/\/[^\s]*[^.,;'">\s\)\]]/.exec(unescape(t)); if(p) x.href=p[0]; } else if (x.onmouseover&&x.onmouseout){x.onmouseover(); if (window.status && window.status.indexOf('://')!=-1)x.href=window.status; x.onmouseout(); } x.onmouseover=null; x.onmouseout=null; }})();

Description 
"Changes redirecting links to go directly to the "real" target. "
From 
http://www.squarefree.com/bookmarklets/zap.html#remove_redirects
lowercase[edit]

javascript:(function(){ var i,t,D=document; for(i=0;t=D.getElementsByTagName('textarea')[i];++i)t.value=t.value.toLowerCase();/*(in ie, text-transform only applies to first line of textarea)*/ var newSS,styles='*{text-transform:lowercase}input,textarea{text-transform:none}';if(D.createStyleSheet){D.createStyleSheet("javascript:'"+styles+"'");}else{newSS=D.createElement('link'); newSS.rel='stylesheet';newSS.href='data:text/css,'+escape(styles);D.getElementsByTagName("head")[0].appendChild(newSS);}})()

Description 
"Makes body text and text in textareas all-lowercase. "
From 
http://www.squarefree.com/bookmarklets/zap.html#lowercase
deleet[edit]

javascript:(function(){ var T=( "| 1 m /\\/\\ m |\\/| w \\/\\/ w |/\\| h |-| h |~| u |_| m |v| n |\\| n /\\/ d |) f |= h }{ i ][ j _| j _] k |< k |{ l |_ p |> p [* r |2 v \\/ x >< y `/ a @ a 4 b 8 e 3 g 6 g 9 o 0 s 5 s $ t + t 7" ).split(" "),i,x,t; function R(t){t=t.toLowerCase();for(i=0;i<T.length;i+=2)while(t.indexOf(T[i+1])!=-1)t=t.replace(T[i+1],T[i]);return t} function F(n,i){t=n.tagName;if(i=n.data)n.data=R(i);if(t!="SCRIPT"&&t!="STYLE")for(i=0;x=n.childNodes[i];++i)F(x)} F(document) })()

Description 
"Makes <a href="http://home.cwru.edu/%7Ejar20/l33tpaper.htm">1337 5p34|{</a> somewhat more readable. "
From 
http://www.squarefree.com/bookmarklets/zap.html#deleet
force wrap[edit]

javascript:(function(){var D=document; F(D.body); function F(n){var u,r,c,x; if(n.nodeType==3){ u=n.data.search(/\S{45}/); if(u>=0) { r=n.splitText(u+45); n.parentNode.insertBefore(D.createElement("WBR"),r); } }else if(n.tagName!="STYLE" && n.tagName!="SCRIPT"){for (c=0;x=n.childNodes[c];++c){F(x);}} } })();

Description 
"Fixes table layouts expanded by very long words. "
From 
http://www.squarefree.com/bookmarklets/zap.html#force_wrap
trigger rollovers[edit]

javascript:(function(){function k(x) { if (x.onmouseover) { x.onmouseover(); x.backupmouseover = x.onmouseover; x.backupmouseout = x.onmouseout; x.onmouseover = null; x.onmouseout = null; } else if (x.backupmouseover) { x.onmouseover = x.backupmouseover; x.onmouseout = x.backupmouseout; x.onmouseover();/*for MM_swapImgRestore*/ x.onmouseout(); } } var i,x; for(i=0; x=document.links[i]; ++i) k(x); for (i=0; x=document.images[i]; ++i) k(x); })()

Description 
"Triggers JavaScript rollovers, fixing most <a href="http://www.fixingyourwebsite.com/mysterymeat.html">mystery meat navigation</a>. "
From 
http://www.squarefree.com/bookmarklets/zap.html#trigger_rollovers

Web Development Bookmarklets[edit]

shell[edit]

javascript:with(window.open("","_blank","width="+screen.width*.6+",left="+screen.width*.35+",height="+screen.height*.9+",resizable,scrollbars=yes")){document.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n\n<html onclick=\"keepFocusInTextbox(event)\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n<title>JavaScript Shell 1.3</title>\n\n<script type=\"text/javascript\">\nvar \nhistList = [\"\"], \nhistPos = 0, \n_scope = {}, \n_win, // a top-level context\nquestion,\n_in,\n_out,\ntooManyMatches = null;\n\nfunction refocus()\n{\n _in.blur(); // Needed for Mozilla to scroll correctly.\n _in.focus();\n}\n\nfunction init()\n{\n _in = document.getElementById(\"input\");\n _out = document.getElementById(\"output\");\n\n _win = window;\n\n if (opener && !opener.closed)\n {\n println(\"Using bookmarklet version of shell: commands will run in opener's context.\", \"message\");\n _win = opener;\n }\n\n initTarget();\n\n recalculateInputHeight();\n refocus();\n}\n\nfunction initTarget()\n{\n _win.Shell = window;\n _win.print = shellCommands.print;\n}\n\n\n// Unless the user is selected something, refocus the textbox.\n// (requested by caillon, brendan, asa)\nfunction keepFocusInTextbox(e) \n{\n var g = e.srcElement ? e.srcElement : e.target; // IE vs. standard\n \n while (!g.tagName)\n g = g.parentNode;\n var t = g.tagName.toUpperCase();\n if (t==\"A\" || t==\"INPUT\")\n return;\n \n if (window.getSelection) {\n // Mozilla\n if (String(window.getSelection()))\n return;\n }\n else if (document.getSelection) {\n // Opera? Netscape 4?\n if (document.getSelection())\n return;\n }\n else {\n // IE\n if ( document.selection.createRange().text )\n return;\n }\n \n refocus();\n}\n\nfunction inputKeydown(e) {\n // Use onkeydown because IE doesn't support onkeypress for arrow keys\n\n //alert(e.keyCode + \" ^ \" + e.keycode);\n\n if (e.shiftKey && e.keyCode == 13) { // shift-enter\n // don't do anything; allow the shift-enter to insert a line break as normal\n } else if (e.keyCode == 13) { // enter\n // execute the input on enter\n try { go(); } catch(er) { alert(er); };\n setTimeout(function() { _in.value = \"\"; }, 0); // can't preventDefault on input, so clear it later\n } else if (e.keyCode == 38) { // up\n // go up in history if at top or ctrl-up\n if (e.ctrlKey || _in.selectionStart == null || _in.selectionStart == 0)\n hist(true);\n } else if (e.keyCode == 40) { // down\n // go down in history if at end or ctrl-down\n if (e.ctrlKey || _in.selectionStart == null || _in.selectionEnd == _in.textLength)\n hist(false);\n } else if (e.keyCode == 9) { // tab\n tabcomplete();\n setTimeout(function() { refocus(); }, 0); // refocus because tab was hit\n } else { }\n\n setTimeout(recalculateInputHeight, 0);\n \n //return true;\n};\n\nfunction recalculateInputHeight()\n{\n var rows = _in.value.split(/\\n/).length\n + 1 // prevent scrollbar flickering in Mozilla\n + (window.opera ? 1 : 0); // leave room for scrollbar in Opera\n \n if (_in.rows != rows) // without this check, it is impossible to select text in Opera 7.60 or Opera 8.0.\n _in.rows = rows;\n}\n\nfunction println(s, type)\n{\n if((s=String(s)))\n {\n var newdiv = document.createElement(\"div\");\n newdiv.appendChild(document.createTextNode(s));\n newdiv.className = type;\n _out.appendChild(newdiv);\n return newdiv;\n }\n}\n\nfunction printWithRunin(h, s, type)\n{\n var div = println(s, type);\n var head = document.createElement(\"strong\");\n head.appendChild(document.createTextNode(h + \": \"));\n div.insertBefore(head, div.firstChild);\n}\n\n\nvar shellCommands = \n{\nload : function load(url)\n{\n var s = _win.document.createElement(\"script\");\n s.type = \"text/javascript\";\n s.src = url;\n _win.document.getElementsByTagName(\"head\")[0].appendChild(s);\n println(\"Loading \" + url + \"...\", \"message\");\n},\n\nprint : function print(s) { println(s, \"print\"); },\n\n// the normal function, \"print\", shouldn't return a value\n// (suggested by brendan; later noticed it was a problem when showing others)\npr : function pr(s) \n{ \n shellCommands.print(s); // need to specify shellCommands so it doesn't try window.print()!\n return s;\n},\n\nprops : function props(e)\n{\n var ns = [\"Methods\", \"Fields\", \"Unreachables\"];\n var as = [[], [], []]; // array of (empty) arrays of arrays!\n var p, j, i; // loop variables, several used multiple times\n\n var protoLevels = 0;\n\n for (p = e; p; p = p.__proto__)\n {\n for (i=0; i<ns.length; ++i)\n as[i][protoLevels] = [];\n ++protoLevels;\n }\n\n for(var a in e)\n {\n // Shortcoming: doesn't check that VALUES are the same in object and prototype.\n\n var protoLevel = -1;\n try\n {\n for (p = e; p && (a in p); p = p.__proto__)\n ++protoLevel;\n }\n catch(er) { protoLevel = 0; } // \"in\" operator throws when param to props() is a string\n\n var type = 1;\n try\n {\n if ((typeof e[a]) == \"function\")\n type = 0;\n }\n catch (er) { type = 2; }\n\n as[type][protoLevel].push(a);\n }\n\n function times(s, n) { return n ? s + times(s, n-1) : \"\"; }\n\n for (j=0; j<protoLevels; ++j)\n for (i=0;i<ns.length;++i)\n if (as[i][j].length) \n printWithRunin(ns[i] + times(\" of prototype\", j), as[i][j].join(\", \"), \"propList\");\n},\n\nblink : function blink(node)\n{\n if (!node) throw(\"blink: argument is null or undefined.\");\n if (node.nodeType == null) throw(\"blink: argument must be a node.\");\n if (node.nodeType == 3) throw(\"blink: argument must not be a text node\");\n if (node.documentElement) throw(\"blink: argument must not be the document object\");\n\n function setOutline(o) { \n return function() {\n if (node.style.outline != node.style.bogusProperty) {\n // browser supports outline (Firefox 1.1 and newer, CSS3, Opera 8).\n node.style.outline = o;\n }\n else if (node.style.MozOutline != node.style.bogusProperty) {\n // browser supports MozOutline (Firefox 1.0.x and older)\n node.style.MozOutline = o;\n }\n else {\n // browser only supports border (IE). border is a fallback because it moves things around.\n node.style.border = o;\n }\n }\n } \n \n function focusIt(a) {\n return function() {\n a.focus(); \n }\n }\n\n if (node.ownerDocument) {\n var windowToFocusNow = (node.ownerDocument.defaultView || node.ownerDocument.parentWindow); // Moz vs. IE\n if (windowToFocusNow)\n setTimeout(focusIt(windowToFocusNow.top), 0);\n }\n\n for(var i=1;i<7;++i)\n setTimeout(setOutline((i%252)?'3px solid red':'none'), i*100);\n\n setTimeout(focusIt(window), 800);\n setTimeout(focusIt(_in), 810);\n},\n\nscope : function scope(sc)\n{\n if (!sc) sc = {};\n _scope = sc;\n println(\"Scope is now \" + sc + \". If a variable is not found in this scope, window will also be searched. New variables will still go on window.\", \"message\");\n},\n\nmathHelp : function mathHelp()\n{\n printWithRunin(\"Math constants\", \"E, LN2, LN10, LOG2E, LOG10E, PI, SQRT1_2, SQRT2\", \"propList\");\n printWithRunin(\"Math methods\", \"abs, acos, asin, atan, atan2, ceil, cos, exp, floor, log, max, min, pow, random, round, sin, sqrt, tan\", \"propList\");\n},\n\nans : undefined\n};\n\n\nfunction hist(up)\n{\n // histList[0] = first command entered, [1] = second, etc.\n // type something, press up --> thing typed is now in \"limbo\"\n // (last item in histList) and should be reachable by pressing \n // down again.\n\n var L = histList.length;\n\n if (L == 1)\n return;\n\n if (up)\n {\n if (histPos == L-1)\n {\n // Save this entry in case the user hits the down key.\n histList[histPos] = _in.value;\n }\n\n if (histPos > 0)\n {\n histPos--;\n // Use a timeout to prevent up from moving cursor within new text\n // Set to nothing first for the same reason\n setTimeout(\n function() {\n _in.value = ''; \n _in.value = histList[histPos]; \n if (_in.setSelectionRange) \n _in.setSelectionRange(0, 0);\n },\n 0\n );\n }\n } \n else // down\n {\n if (histPos < L-1)\n {\n histPos++;\n _in.value = histList[histPos];\n }\n else if (histPos == L-1)\n {\n // Already on the current entry: clear but save\n if (_in.value)\n {\n histList[histPos] = _in.value;\n ++histPos;\n _in.value = \"\";\n }\n }\n }\n}\n\nfunction tabcomplete()\n{\n /*\n * Working backwards from s[from], find the spot\n * where this expression starts. It will scan\n * until it hits a mismatched ( or a space,\n * but it skips over quoted strings.\n * If stopAtDot is true, stop at a '.'\n */\n function findbeginning(s, from, stopAtDot)\n {\n /*\n * Complicated function.\n *\n * Return true if s[i] == q BUT ONLY IF\n * s[i-1] is not a backslash.\n */\n function equalButNotEscaped(s,i,q)\n {\n if(s.charAt(i) != q) // not equal go no further\n return false;\n\n if(i==0) // beginning of string\n return true;\n\n if(s.charAt(i-1) == '\\\\') // escaped?\n return false;\n\n return true;\n }\n\n var nparens = 0;\n var i;\n for(i=from; i>=0; i--)\n {\n if(s.charAt(i) == ' ')\n break;\n\n if(stopAtDot && s.charAt(i) == '.')\n break;\n \n if(s.charAt(i) == ')')\n nparens++;\n else if(s.charAt(i) == '(')\n nparens--;\n\n if(nparens < 0)\n break;\n\n // skip quoted strings\n if(s.charAt(i) == '\\'' || s.charAt(i) == '\\\"')\n {\n //dump(\"skipping quoted chars: \");\n var quot = s.charAt(i);\n i--;\n while(i >= 0 && !equalButNotEscaped(s,i,quot)) {\n //dump(s.charAt(i));\n i--;\n }\n //dump(\"\\n\");\n }\n }\n return i;\n }\n\n function getcaretpos(inp)\n {\n if(inp.selectionEnd)\n return inp.selectionEnd;\n\n if(inp.createTextRange)\n {\n //dump('using createTextRange\\n');\n var docrange = _win.Shell.document.selection.createRange();\n var inprange = inp.createTextRange();\n inprange.setEndPoint('EndToStart', docrange);\n return inprange.text.length;\n }\n\n return inp.value.length; // sucks, punt\n }\n\n function setselectionto(inp,pos)\n {\n if(inp.selectionStart) {\n inp.selectionStart = inp.selectionEnd = pos;\n }\n else if(inp.createTextRange) {\n var docrange = _win.Shell.document.selection.createRange();\n var inprange = inp.createTextRange();\n inprange.move('character',pos);\n inprange.select();\n }\n else { // err...\n /*\n inp.select();\n if(_win.Shell.document.getSelection())\n _win.Shell.document.getSelection() = \"\";\n */\n }\n }\n // get position of cursor within the input box\n var caret = getcaretpos(_in);\n\n if(caret) {\n //dump(\"----\\n\");\n var dotpos, spacepos, complete, obj;\n //dump(\"caret pos: \" + caret + \"\\n\");\n // see if there's a dot before here\n dotpos = findbeginning(_in.value, caret-1, true);\n //dump(\"dot pos: \" + dotpos + \"\\n\");\n if(dotpos == -1 || _in.value.charAt(dotpos) != '.') {\n dotpos = caret;\n//dump(\"changed dot pos: \" + dotpos + \"\\n\");\n }\n\n // look backwards for a non-variable-name character\n spacepos = findbeginning(_in.value, dotpos-1, false);\n //dump(\"space pos: \" + spacepos + \"\\n\");\n // get the object we're trying to complete on\n if(spacepos == dotpos || spacepos+1 == dotpos || dotpos == caret)\n {\n // try completing function args\n if(_in.value.charAt(dotpos) == '(' ||\n (_in.value.charAt(spacepos) == '(' && (spacepos+1) == dotpos))\n {\n var fn,fname;\n var from = (_in.value.charAt(dotpos) == '(') ? dotpos : spacepos;\n spacepos = findbeginning(_in.value, from-1, false);\n\n fname = _in.value.substr(spacepos+1,from-(spacepos+1));\n //dump(\"fname: \" + fname + \"\\n\");\n try {\n with(_win.Shell._scope)\n with(_win)\n with(Shell.shellCommands)\n fn = eval(fname);\n }\n catch(er) {\n //dump('fn is not a valid object\\n');\n return;\n }\n if(fn == undefined) {\n //dump('fn is undefined');\n return;\n }\n if(fn instanceof Function)\n {\n // Print function definition, including argument names, but not function body\n if(!fn.toString().match(/function .+?\\(\\) +\\{\\n +\\[native code\\]\\n\\}/))\n println(fn.toString().match(/function .+?\\(.*?\\)/), \"tabcomplete\");\n }\n\n return;\n }\n else\n obj = _win;\n }\n else\n {\n var objname = _in.value.substr(spacepos+1,dotpos-(spacepos+1));\n //dump(\"objname: |\" + objname + \"|\\n\");\n try {\n with(_win.Shell._scope)\n with(_win)\n obj = eval(objname);\n }\n catch(er) {\n printError(er); \n return;\n }\n if(obj == undefined) {\n // sometimes this is tabcomplete's fault, so don't print it :(\n // e.g. completing from \"print(document.getElements\"\n // println(\"Can't complete from null or undefined expression \" + objname, \"error\");\n return;\n }\n }\n //dump(\"obj: \" + obj + \"\\n\");\n // get the thing we're trying to complete\n if(dotpos == caret)\n {\n if(spacepos+1 == dotpos || spacepos == dotpos)\n {\n // nothing to complete\n //dump(\"nothing to complete\\n\");\n return;\n }\n\n complete = _in.value.substr(spacepos+1,dotpos-(spacepos+1));\n }\n else {\n complete = _in.value.substr(dotpos+1,caret-(dotpos+1));\n }\n //dump(\"complete: \" + complete + \"\\n\");\n // ok, now look at all the props/methods of this obj\n // and find ones starting with 'complete'\n var matches = [];\n var bestmatch = null;\n for(var a in obj)\n {\n //a = a.toString();\n //XXX: making it lowercase could help some cases,\n // but screws up my general logic.\n if(a.substr(0,complete.length) == complete) {\n matches.push(a);\n ////dump(\"match: \" + a + \"\\n\");\n // if no best match, this is the best match\n if(bestmatch == null)\n {\n bestmatch = a;\n }\n else {\n // the best match is the longest common string\n function min(a,b){ return ((a<b)?a:b); }\n var i;\n for(i=0; i< min(bestmatch.length, a.length); i++)\n {\n if(bestmatch.charAt(i) != a.charAt(i))\n break;\n }\n bestmatch = bestmatch.substr(0,i);\n ////dump(\"bestmatch len: \" + i + \"\\n\");\n }\n ////dump(\"bestmatch: \" + bestmatch + \"\\n\");\n }\n }\n bestmatch = (bestmatch || \"\");\n ////dump(\"matches: \" + matches + \"\\n\");\n var objAndComplete = (objname || obj) + \".\" + bestmatch;\n //dump(\"matches.length: \" + matches.length + \", tooManyMatches: \" + tooManyMatches + \", objAndComplete: \" + objAndComplete + \"\\n\");\n if(matches.length > 1 && (tooManyMatches == objAndComplete || matches.length <= 10)) {\n\n printWithRunin(\"Matches: \", matches.join(', '), \"tabcomplete\");\n tooManyMatches = null;\n }\n else if(matches.length > 10)\n {\n println(matches.length + \" matches. Press tab again to see them all\", \"tabcomplete\");\n tooManyMatches = objAndComplete;\n }\n else {\n tooManyMatches = null;\n }\n if(bestmatch != \"\")\n {\n var sstart;\n if(dotpos == caret) {\n sstart = spacepos+1;\n }\n else {\n sstart = dotpos+1;\n }\n _in.value = _in.value.substr(0, sstart)\n + bestmatch\n + _in.value.substr(caret);\n setselectionto(_in,caret + (bestmatch.length - complete.length));\n }\n }\n}\n\nfunction printQuestion(q)\n{\n println(q, \"input\");\n}\n\nfunction printAnswer(a)\n{\n if (a !== undefined) {\n println(a, \"normalOutput\");\n shellCommands.ans = a;\n }\n}\n\nfunction printError(er)\n{ \n if (er.name)\n println(er.name + \": \" + er.message, \"error\"); // Because IE doesn't have error.toString.\n else\n println(er, \"error\"); // Because security errors in Moz /only/ have toString.\n}\n\nfunction go(s)\n{\n _in.value = question = s ? s : _in.value;\n\n if (question == \"\")\n return;\n\n histList[histList.length-1] = question;\n histList[histList.length] = \"\";\n histPos = histList.length - 1;\n \n // Unfortunately, this has to happen *before* the JavaScript is run, so that \n // print() output will go in the right place.\n _in.value='';\n recalculateInputHeight();\n printQuestion(question);\n\n if (_win.closed) {\n printError(\"Target window has been closed.\");\n return;\n }\n \n try { (\"Shell\" in _win) }\n catch(er) {\n printError(\"The JavaScript Shell cannot access variables in the target window. The most likely reason is that the target window now has a different page loaded and that page has a different hostname than the original page.\");\n return;\n }\n\n if (!(\"Shell\" in _win))\n initTarget(); // silent\n\n // Evaluate Shell.question using _win's eval (this is why eval isn't in the |with|, IIRC).\n _win.location.href = \"javascript:try{ Shell.printAnswer(eval('with(Shell._scope) with(Shell.shellCommands) {' + Shell.question + String.fromCharCode(10) + '}')); } catch(er) { Shell.printError(er); }; setTimeout(Shell.refocus, 0); void 0\";\n}\n\n</script>\n\n<!-- for http://ted.mielczarek.org/code/mozilla/extensiondev/ -->\n<script type=\"text/javascript\" src=\"chrome://extensiondev/content/rdfhistory.js\"></script>\n<script type=\"text/javascript\" src=\"chrome://extensiondev/content/chromeShellExtras.js\"></script>\n\n<style type=\"text/css\">\nbody { background: white; color: black; }\n\n#output { white-space: pre; white-space: -moz-pre-wrap; } /* Preserve line breaks, but wrap too if browser supports it */\nh3 { margin-top: 0; margin-bottom: 0em; }\nh3 + div { margin: 0; }\n\nform { margin: 0; padding: 0; }\n#input { width: 100%25; border: none; padding: 0; }\n\n.input { color: blue; background: white; font: inherit; font-weight: bold; margin-top: .5em; /* background: #E6E6FF; */ }\n.normalOutput { color: black; background: white; }\n.print { color: brown; background: white; }\n.error { color: red; background: white; }\n.propList { color: green; background: white; }\n.message { color: green; background: white; }\n.tabcomplete { color: purple; background: white; }\n</style>\n</head>\n\n<body onload=\"init()\">\n\n <div id=\"output\"><h3>JavaScript Shell 1.3</h3><div>Features: autocompletion of property names with Tab, multiline input with Shift+Enter, input history with (Ctrl+) Up/Down, <a accesskey=M href=\"javascript:go('scope(Math); mathHelp();');\">Math</a>, <a accesskey=H href=\"http://www.squarefree.com/shell/?ignoreReferrerFrom=shell1.3\">help</a></div><div>Values and functions: ans, print(string), <a accesskey=P href=\"javascript:go('props(ans)')\">props(object)</a>, <a accesskey=B href=\"javascript:go('blink(ans)')\">blink(node)</a>, load(scriptURL), scope(object)</div></div>\n\n<div><textarea id=\"input\" class=\"input\" wrap=\"off\" onkeydown=\"inputKeydown(event)\" rows=\"1\"></textarea></div>\n\n</body>\n\n</html>");document.close();}void 0

Description 
"Opens a JavaScript Shell and allows it to access the current page. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#shell
jsenv[edit]

javascript:with(window.open("","_blank","width="+screen.width*.6+",left="+screen.width*.35+",height="+screen.height*.9+",resizable,scrollbars=yes")){document.write("<head><title>JavaScript Development Environment 2.0</title><!-- about:blank confuses opera.. --></head>\n\n\n\n\n<frameset rows=\"25,*,*\">\n\n <frame name=\"toolbarFrame\" src=\"about:blank\" noresize=\"noresize\">\n\n <frame name=\"inputFrame\" src=\"about:blank\">\n\n <frame name=\"outputFrame\" src=\"about:blank\">\n\n</frameset>\n\n");document.close(); frames[0].document.write("<head><!-- no doctype - it makes IE ignore the height: 100%25. --><title>toolbarFrame</title>\n\n<style type=\"text/css\">\nhtml,body { width: 100%25; height: 100%25; border: none; margin: 0px; padding: 0px; }\nbutton { height: 100%25; }\n</style>\n\n<script type=\"text/javascript\">\n\nvar outputFrame = top.outputFrame;\nvar inputFrame = top.inputFrame;\nvar framesetElement = top.document.documentElement.getElementsByTagName(\"frameset\")[0];\n\nvar savedRows;\n\n\n// Need to use C-style comments in handleError() and print() \n// because IE retains them when decompiling a function.\n\n\n\nfunction print(s, c) {\n var outputFrame = top.outputFrame; /* duplicated here in case this function is elsewhere */\n var doc = outputFrame.document;\n\n var newdiv = doc.createElement(\"div\");\n newdiv.appendChild(doc.createTextNode(s));\n if (c)\n newdiv.style.color = c;\n doc.body.appendChild(newdiv);\n}\n\nfunction handleError(er, file, lineNumber) \n{\n print(\"Error on line \" + lineNumber + \": \" + er, \"red\"); \n \n /* Find the character offset for the line */\n /* (code adapted from blogidate xml well-formedness bookmarklet) */\n var ta = inputFrame.document.getElementById(\"input\");\n var lines = ta.value.split(\"\\n\");\n var cc = 0; \n var i;\n for(i=0; i < (lineNumber - 1); ++i) \n cc += lines[i].length + 1;\n\n /* Hacky(?) workaround for IE's habit of including \\r's in strings */\n if (ta.value.split(\"\\r\").length > 1)\n cc -= lineNumber - 1;\n\n /* Select the line */\n if(document.selection) { \n /* IE (Leonard Lin gave me this code) */\n var sel = ta.createTextRange(); \n sel.moveStart(\"character\", cc); \n sel.collapse(); \n sel.moveEnd(\"character\", lines[i].length); \n sel.select();\n } else { \n /* Mozilla */\n ta.selectionStart = cc; \n ta.selectionEnd = cc + lines[i].length; \n }\n \n /* return true; */ /* nah, let the error go through to IE's js consolish thing! */\n}\n\n\n\n\n\nfunction showHideOutput()\n{\n if (outputFrame.document.body.clientHeight > 100) {\n // hide\n savedRows = framesetElement.rows; \n framesetElement.rows = \"25,*,0\";\n }\n else {\n // show. use the previous size, if possible\n if (savedRows) {\n framesetElement.rows = savedRows;\n savedRows = null;\n }\n else {\n framesetElement.rows = \"25,*,*\";\n }\n }\n}\n\nfunction refocus()\n{\n inputFrame.document.getElementById(\"input\").focus();\n}\n\n\nfunction clearOutput()\n{\n var b = outputFrame.document.body;\n while(b.firstChild)\n b.removeChild(b.firstChild);\n}\n\nfunction stripLineBreaks(s)\n{\n return s.replace(/\\n/g, \"\").replace(/\\r/g, \"\"); // stripping \\r is for IE\n}\n\nfunction execute()\n{\n var js = inputFrame.document.getElementById(\"input\").value;\n\n var useOpener = top.opener && !top.opener.closed;\n var oldStyle = !! document.all; // lame but meh.\n \n print(\"Running\" + (useOpener ? \" in bookmarklet mode\" : \"\") + (oldStyle ? \" in make-IE-happy mode\" : \"\") + \"...\", \"orange\");\n\n if (useOpener)\n executeWithJSURL(js, top.opener); // only way to execute against another frame\n else if (oldStyle)\n executeWithDW(js, execFrame); // only way to get line numbers in IE\n else\n executeWithJSURL(js, execFrame); // faster in Mozilla \n}\n\n// Advantages: can get line numbers in IE.\nfunction executeWithDW(js, win)\n{\n win.document.open();\n win.inputFrame = inputFrame;\n win.outputFrame = outputFrame;\n win.document.write(\n stripLineBreaks(\n '<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">' +\n '<html><head><title>execFrame<\\/title><script type=\"text/javascript\">'\n + print // yay for decompilation!\n + handleError \n + \"window.onerror = handleError;\"\n + \"<\\/script><\\/head>\"\n ) \n + '<body><script type=\"text/javascript\">'\n + js // should escape it a little to remove the string <\\/script> at least...\n + \"<\\/script><\\/body><\\/html>\"\n );\n win.document.close();\n}\n\n// Advantages: can be used to inject a script into another window, faster in Mozilla.\nfunction executeWithJSURL(js, win)\n{\n // isolate scope\n js = \"(function(){ \" + js + \" \\n })()\";\n\n win.print = print;\n win.onerror = handleError;\n\n // double encodeURIComponent because javascript: URLs themselves are encoded!\n win.location.href = 'javascript:eval(decodeURIComponent(\"' + encodeURIComponent(encodeURIComponent(js)) + '\")); void 0;';\n \n refocus();\n}\n\n// Other ideas I haven't tried lately: create a <script> element, eval.\n\n\nfunction makeUserScript(userScriptLink)\n{\n userScriptLink.href = \n \"data:text/javascript;charset=utf-8,\" + \n encodeURIComponent(inputFrame.document.getElementById(\"input\").value + \"//.user.js\");\n}\n\n</script></head>\n\n<body>\n\n<button accesskey=\"E\" onclick=\"execute(); refocus();\"><u>E</u>xecute</button>\n<!-- <button accesskey=\"R\" onclick=\"reloadAndExecute(); refocus();\"><u>R</u>eload and execute</button> -->\n<button accesskey=\"C\" onclick=\"clearOutput(); refocus();\"><u>C</u>lear output</button>\n<button accesskey=\"S\" onclick=\"showHideOutput(); refocus();\"><u>S</u>how/hide output</button>\n<!-- <button accesskey=\"H\" onclick=\"help(); refocus();\"><u>H</u>elp</button> -->\n\n<a href=\"data:text/html,...\" onfocus=\"makeUserScript(this);\" onmouseover=\"makeUserScript(this);\" target=\"_blank\">Install as user script</a>\n\n<div style=\"visibility: hidden;\">\n<iframe name=\"execFrame\" src=\"about:blank\" height=\"5\" width=\"5\"></iframe>\n</div>\n\n</body>"); frames[0].document.close(); frames[1].document.write("<head><!-- no doctype - it makes IE ignore the height: 100%25. --><title>inputFrame</title>\n\n\n\n<style type=\"text/css\">\n\nhtml,body,form,textarea { width: 100%25; height: 100%25; border: none; margin: 0px; padding: 0px; }\nhtml,body { overflow: hidden; }\n\n</style></head>\n\n<body onload=\"document.getElementById('input').select();\">\n<textarea style=\"background-color: rgb(221, 238, 255);\" id=\"input\">// ==UserScript==\n// @namespace http://www.squarefree.com/jsenv/autogenerated\n// @name Unnamed script\n// @description Undescribed script\n// ==/UserScript==\n\nprint(\"Squares of numbers 0 through 4:\");\nfor (var i = 0; i < 5; ++i)\n print(i * i);\n \nthis.line.causes.an.error\n</textarea>\n</body>"); frames[1].document.close(); }void 0

Description 
"Opens a <a href="../jsenv/">JavaScript Development Environment</a> and allows it to access the current page. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#jsenv
test styles[edit]

javascript:(function(){function init(){var newline=unescape("%"+"0A");dead=false;oldCSS=null;x=opener;ta=document.f.ta;ta.select();ta.value="/* Type CSS rules here and they will be applied"+newline+"to pages from '"+location.host+"'"+newline+"immediately as long as you keep this window open. */"+newline+newline;update();}function update(){try{if(!x||x.closed){ta.style.backgroundColor="#ddd";return;}x.bookmarkletStyleSheet;}catch(er){ta.style.backgroundColor="#fdc";setTimeout(update,150);dead=true;return;}if(dead){dead=false;ta.style.backgroundColor="";oldCSS=null;}if(!x.testStyles){var newSS;newSS=x.document.createElement("link");newSS.rel="stylesheet";newSS.type="text/css";x.document.getElementsByTagName("head")[0].appendChild(newSS);x.testStyles=newSS;oldCSS=null;}if(oldCSS!=ta.value){oldCSS=ta.value;if(window.opera)x.testStyles.href="javascript:unescape('"+escape(ta.value)+"')";else if(navigator.userAgent.indexOf("MSIE")!=-1)x.testStyles.href="javascript:unescape('"+escape(escape(ta.value))+"')";else x.testStyles.href="data:text/css,"+escape(ta.value);}setTimeout(update,150);}y=window.open('','','resizable,width=500,height=300');y.document.write('<title>New CSS Style Sheet</title><style>.ec { width: 100%; height: 100%; border: none; margin: 0px; padding: 0px; }</style><body class="ec"><form name="f" style="margin: 0px;" class="ec"><textarea name="ta" wrap="soft" style="margin: 0px; border: 0px; width:100%; height:100%;" class="ec"></textarea><script>'+update+init+'init();<'+'/script>');y.document.close();})()

Description 
"Type in CSS rules to experiment or to create a temporary user style sheet. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#test_styles
edit styles[edit]

javascript:(function(){function init(){var newline=unescape("%"+"0A"),importCount=0,L=[];dead=false;oldCSS=null;x=opener;ta=document.f.ta;ta.select();if(x.editStyles){ta.value=x.editStyles.innerHTML;update();return;}ta.value="/* Type CSS rules here and they will be applied"+newline+"to pages from '"+location.host+"'"+newline+"immediately as long as you keep this window open. */"+newline+newline;function add(s){if(!s.disabled){var y={sheet:s,readable:true,label:"Imported",inline:false,shorturl:"",fulltext:""};try{for(var k=0,m;m=s.cssRules[k];++k)if(m.type==3)add(m.styleSheet);}catch(er){y.readable=false;}L.push(y);if(s.ownerNode){y.label=s.ownerNode.tagName.toUpperCase()+"-tag";if(!s.ownerNode.getAttribute("src")&&!s.ownerNode.href)y.inline=true;}if(y.inline){y.label="Inline "+y.label;y.fulltext=fix(s.ownerNode.innerHTML);}else if(s.href.substr(0,13)=="data:text/css"){y.shorturl=" contained in a data: URL";y.fulltext=fix(unescape(s.href.slice(14)));}else{++importCount;y.importtext="@import \""+s.href+"\";";y.shorturl=" "+s.href.split('/').reverse()[0];if(!y.readable){y.fulltext="/* Out-of-domain; imported above. */";}else if(s.href.substr(0,5)!="http:"){y.fulltext="/* Non-http; imported above. */";}else{var loadingText="/* Loading ("+(L.length-1)+") */";y.fulltext=loadingText;var p=new XMLHttpRequest();p.onload=function(e){ta.value=ta.value.replace(y.importtext+newline,"");y.fulltext=p.responseText;ta.value=ta.value.replace(loadingText,fix(y.fulltext));ta.value=ta.value.replace(firstNote+newline,"");};p.open("GET",s.href);p.send(null);}}}}function fix(s){while((s[0]==newline)&&s.length>1)s=s.slice(1);while((s[s.length-1]==newline)&&s.length>1)s=s.substr(0,s.length-1);s=s.replace(/@import.*;/ig,function(){return "/* "+RegExp.lastMatch+" */";});return s;}for(var i=0,ss;ss=x.document.styleSheets[i];++i)add(ss);var imports="",main="";var firstNote="/**** Style sheets whose contents could be loaded were ****/"+newline+"/**** imported instead. Rule order may be incorrect ****/"+newline+"/**** as a result. ****/"+newline;if(importCount){ta.value+=firstNote;}for(var i=0;ss=L[i];++i){if(ss.importtext){imports+=ss.importtext+newline;}main+="/**** "+ss.label+" style sheet"+ss.shorturl+" ****/"+newline;main+=newline;main+=ss.fulltext;main+=newline;main+=newline;main+=newline;}ta.value+=imports+newline+main;update();}function update(){try{if(!x||x.closed){ta.style.backgroundColor="#ddd";return;}x.editStyles;}catch(er){ta.style.backgroundColor="#fdc";setTimeout(update,150);dead=true;return;}if(dead){dead=false;ta.style.backgroundColor="";oldCSS=null;}if(!x.editStyles){var newSS;newSS=x.document.createElement("style");newSS.type="text/css";x.document.getElementsByTagName("head")[0].appendChild(newSS);x.editStyles=newSS;oldCSS=null;for(var i=0,ss;ss=x.document.styleSheets[i];++i)ss.disabled=true;}if(oldCSS!=ta.value){oldCSS=ta.value;x.editStyles.innerHTML=ta.value;}setTimeout(update,150);}y=open('','','resizable,scrollbars=yes,width=550,height=520');y.document.write('<title>Edit Styles</title><style>.ec { width: 100%; height: 100%; border: none; margin: 0px; padding: 0px; }</style><body class="ec"><form name="f" style="margin: 0px;" class="ec"><textarea name="ta" wrap="soft" style="margin: 0px; border: 0px; width:100%; height:100%;" class="ec"></textarea><script>'+update+init+'init();<'+'/script>');y.document.close();})()

Description 
"Experiment with changes to the page's style sheet. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#edit_styles
ancestors[edit]

javascript:(function(){function A(n,g){var p=n.parentNode,t=n.tagName;if(!p)return "";if(!t)return A(p,g);var T=t.toUpperCase(),b=(T!="TABLE"&&T!="TBODY"&&T!="THEAD"&&T!="TR"),c=n.className,i=n.id;return A(p,' > ')+(b?T:T.toLowerCase())+(c?"."+c:"")+(i?"#"+i:"")+(b?g:' ');}document.onmouseover=function(e){e=e?e:event;var s,g=e.target;g=g?g:e.srcElement;try{s=A(g,'');}catch(err){s=err.message;}window.status=s;return true;};window.status=A(document.documentElement,'');})()

Description 
"Lists the ancestors of any element you hover over in the status bar. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#ancestors
computed styles[edit]

javascript:(function(){function A(n,g){var p=n.parentNode,t=n.tagName;if(!p)return "";if(!t)return A(p,g);var T=t.toUpperCase(),b=(T!="TABLE"&&T!="TBODY"&&T!="THEAD"&&T!="TR"),c=n.className,i=n.id;return A(p,' > ')+(b?T:T.toLowerCase())+(c?"."+c:"")+(i?"#"+i:"")+(b?g:' ');}document.onmouseover=function(e){e=e?e:event;var s,g=e.target;g=g?g:e.srcElement;try{s=A(g,'')+" (click for computed styles)";}catch(err){s=err.message;}window.status=s;return true;};window.status=A(document.documentElement,'');var newSS,styles='* { cursor: crosshair; }';newSS=document.createElement('link');newSS.rel='stylesheet';newSS.type='text/css';newSS.href='data:text/css,'+escape(styles);document.getElementsByTagName("head")[0].appendChild(newSS);document.onclick=function(e){e=e?e:event;var s,g=e.target;g=g?g:e.srcElement;var x=window.open('','computedStyles');x.document.open();x.document.close();var d=x.document;x.onunload=function(){document.onclick=null;document.onmouseover=null;window.status=null;newSS.href='data:text/css,';};function sp(n,t,col){var r=d.createElement(n);r.appendChild(d.createTextNode(t));if(col)r.style.color=col;return r;}var typeIndex={'top':1,'bottom':1,'height':1,'width':1,'left':1,'right':1,'position':0,'display':0,'-moz-appearance':0,'-moz-box-sizing':0};var colors=["red","green","black"];function undirect(v){return v.replace(/\-(left|top|bottom|right)/,"-*");}function diff(n,p){pcs=p.ownerDocument.defaultView.getComputedStyle(p,"");ncs=n.ownerDocument.defaultView.getComputedStyle(n,"");var A=[];var B={};var C={};for(var i=0;i<ncs.length;++i){var e=ncs.item(i),v=ncs.getPropertyValue(e),pv=pcs.getPropertyValue(e);if(v!=pv){var u=undirect(e);if(u.indexOf("-*")!=-1){if(!B[u])B[u]=[0,v];if(B[u][1]==v)++(B[u][0]);}A.push([typeIndex[e]!=null?typeIndex[e]:2,e,v]);}}A=A.sort();for(var u in B)if(B[u][0]==4)C[u]=true;for(var i in A){var t=A[i],e=t[1],v=t[2],u=undirect(e);if(C[u]){if(t[1].indexOf("-left")!=-1)d.body.appendChild(sp("div",u+": "+v,colors[t[0]]));}else d.body.appendChild(sp("div",e+": "+v,colors[t[0]]));}}function info(n){if(!n)return;if(n.tagName){d.body.appendChild(sp("h4",A(n,'')));diff(n,n.parentNode.nodeType!='9'?n.parentNode:d.documentElement);}info(n.parentNode);}d.body.appendChild(sp("p","This shows how the computed style of each node differs from the computed style of its parent. The root element, which has no parent, is instead compared against the root of a blank HTML document."));info(g);x.focus();e.preventDefault();}})()

Description 
"Lists the computed styles of an element and of its ancestors. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#computed_styles
zap style sheets[edit]

javascript:(function(){var i,x;for(i=0;x=document.styleSheets[i];++i)x.disabled=true;})();

Description 
"Disables all style sheets. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#zap_style_sheets
zap presentational html[edit]

javascript:(function(){var H=["bgcolor","bgColor","background","color","align","text","alink","vlink"],Y={FONT:1,CENTER:1},d=[],p; function R(N){var a,x,i,t; if(t=N.tagName){ t=t.toUpperCase(); for (i=0;a=H[i];++i)if(N.getAttribute(a))N.removeAttribute(a); for(i=0;x=N.childNodes[i];++i)R(x); if (Y[t])d.push(N); } } R(document.documentElement); for (i=0;N=d[i];++i) { p=N.parentNode; while(N.firstChild)p.insertBefore(N.firstChild,N); p.removeChild(N); } })()

Description 
"Removes most presentational attributes and tags while leaving style sheets intact. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#zap_presentational_html
view style sheets[edit]

javascript:s=document.getElementsByTagName('STYLE'); ex=document.getElementsByTagName('LINK'); d=window.open().document; /*set base href*/d.open();d.close(); b=d.body; function trim(s){return s.replace(/^\s*\n/, '').replace(/\s*$/, ''); }; function iff(a,b,c){return b?a+b+c:'';}function add(h){b.appendChild(h);} function makeTag(t){return document.createElement(t);} function makeText(tag,text){t=makeTag(tag);t.appendChild(document.createTextNode(text)); return t;} add(makeText('style', 'iframe{width:100%;height:18em;border:1px solid;')); add(makeText('h3', d.title='Style sheets in ' + location.href)); for(i=0; i<s.length; ++i) { add(makeText('h4','Inline style sheet' + iff(' title="',s[i].title,'"'))); add(makeText('pre', trim(s[i].innerHTML))); } for (i=0; i<ex.length; ++i) { rs=ex[i].rel.split(' '); for(j=0;j<rs.length;++j) if (rs[j].toLowerCase()=='stylesheet') { add(makeText('h4','link rel="' + ex[i].rel + '" href="' + ex[i].href + '"' + iff(' title="',ex[i].title,'"'))); iframe=makeTag('iframe'); iframe.src=ex[i].href; add(iframe); break; } } void 0

Description 
"Displays linked and embedded style sheets. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#view_style_sheets
view scripts[edit]

javascript:s=document.getElementsByTagName('SCRIPT'); d=window.open().document; /*140681*/d.open();d.close(); b=d.body; function trim(s){return s.replace(/^\s*\n/, '').replace(/\s*$/, ''); }; function add(h){b.appendChild(h);} function makeTag(t){return document.createElement(t);} function makeText(tag,text){t=makeTag(tag);t.appendChild(document.createTextNode(text)); return t;} add(makeText('style', 'iframe{width:100%;height:18em;border:1px solid;')); add(makeText('h3', d.title='Scripts in ' + location.href)); for(i=0; i<s.length; ++i) { if (s[i].src) { add(makeText('h4','script src="' + s[i].src + '"')); iframe=makeTag('iframe'); iframe.src=s[i].src; add(iframe); } else { add(makeText('h4','Inline script')); add(makeText('pre', trim(s[i].innerHTML))); } } void 0

Description 
"Displays linked and embedded scripts. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#view_scripts
view variables[edit]

javascript:(function(){var x,d,i,v,st; x=open(); d=x.document; d.open(); function hE(s){s=s.replace(/&/g,"&");s=s.replace(/>/g,">");s=s.replace(/</g,"<");return s;} d.write("<style>td{vertical-align:top; white-space:pre; } table,td,th { border: 1px solid #ccc; } div.er { color:red }</style><table border=1><thead><tr><th>Variable</th><th>Type</th><th>Value as string</th></thead>"); for (i in window) { if (!(i in x) ) { v=window[i]; d.write("<tr><td>" + hE(i) + "</td><td>" + hE(typeof(window[i])) + "</td><td>"); if (v===null) d.write("null"); else if (v===undefined) d.write("undefined"); else try{st=v.toString(); if (st.length)d.write(hE(v.toString())); else d.write("%C2%A0")}catch(er){d.write("<div class=er>"+hE(er.toString())+"</div>")}; d.write(""); } } d.write(""); d.close(); })();

Description 
"Displays all JavaScript variables and functions. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#view_variables
list classes[edit]

javascript:(function(){var a={},b=[],i,e,c,k,d,s="<table border=1><thead><tr><th>#</th><th>Tag</th><th>className</th></thead>";for(i=0;e=document.getElementsByTagName("*")[i];++i)if(c=e.className){k=e.tagName+"."+c;a[k]=a[k]?a[k]+1:1;}for(k in a)b.push([k,a[k]]);b.sort();for(i in b) s+="<tr><td>"+b[i][1]+"</td><td>"+b[i][0].split(".").join("</td><td>")+"</td>";s+="</table>";d=open().document;d.write(s);d.close();})()

Description 
"Lists classes used in the document. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#list_classes
generated source[edit]

javascript:(function(){ function htmlEscape(s){s=s.replace(/&/g,'&');s=s.replace(/>/g,'>');s=s.replace(/</g,'<');return s;} x=window.open(); x.document.write('<pre>' + htmlEscape('<html>\n' + document.documentElement.innerHTML + '\n</html>')); x.document.close(); })();

Description 
"Displays the DOM tree of the page as HTML. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#generated_source
partial source[edit]

javascript:function getSelSource() { x = document.createElement("div"); x.appendChild(window.getSelection().getRangeAt(0).cloneContents()); return x.innerHTML; } function makeHR() { return document.createElement("hr"); } function makeParagraph(text) { p = document.createElement("p"); p.appendChild(document.createTextNode(text)); return p; } function makePre(text) { p = document.createElement("pre"); p.appendChild(document.createTextNode(text)); return p; } nd = window.open().document; ndb = nd.body; if (!window.getSelection || !window.getSelection().rangeCount || window.getSelection().getRangeAt(0).collapsed) { nd.title="Generated Source of: " + location.href; ndb.appendChild(makeParagraph("No selection, showing generated source of entire document.")); ndb.appendChild(makeHR()); ndb.appendChild(makePre("<html>\n" + document.documentElement.innerHTML + "\n</html>")); } else { nd.title="Partial Source of: " + location.href; ndb.appendChild(makePre(getSelSource())); }; void 0

Description 
"Displays the DOM tree of the selection as HTML. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#partial_source
show blocks[edit]

javascript:(function(){var newSS; newSS=document.createElement("link"); newSS.rel="stylesheet"; newSS.type="text/css"; newSS.href = "http://www.cs.hmc.edu/~jruderma/block-structure.css"; document.getElementsByTagName("head")[0].appendChild(newSS); })();

Description 
"Draws borders to show tables (colors indicate nesting), paragraphs, and divs. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#show_blocks
topographic view[edit]

javascript:(function(){var s="body",c="",I=" ! important;",i,b,f,x,h; for(i=0;i<17;++i) { x = i.toString(16); b = i>15?"FCC":x+x+x; f = i>9?"000":"FFF"; c += s + " {background: #" + b + I + "border-color: #" + b + I + "color: #" + f + I + "}\n"; s += " *"; } if(document.createStyleSheet) { document.createStyleSheet("javascript:'"+c+"'"); } else { h=document.createElement('link'); h.rel='stylesheet'; h.href='data:text/css,'+escape(c); document.getElementsByTagName("head")[0].appendChild(h);}})()

Description 
"Shows the nesting level of every element using shading. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#topographic_view
topo with borders[edit]

javascript:(function(){var s="body",c="",I=" ! important;",i,b,f,x,h; for(i=0;i<17;++i) { x = i.toString(16); b = i>15?"FCC":x+x+x; f = i>9?"000":"FFF"; c += s + " {background: #" + b + I + "border: 1px outset #" + b + I + "color: #" + f + I + "}\n"; s += " *"; } if(document.createStyleSheet) { document.createStyleSheet("javascript:'"+c+"'"); } else { h=document.createElement('link'); h.rel='stylesheet'; h.href='data:text/css,'+escape(c); document.getElementsByTagName("head")[0].appendChild(h);}})()

Description 
"Shows the nesting level of every element using shading and 3D borders. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#topo_with_borders
make link[edit]

javascript:function htmlEscape(s){s=s.replace(/&/g,'&');s=s.replace(/>/g,'>');s=s.replace(/</g,'<');return s;} function linkEscape(s){s=s.replace(/&/g,'&');s=s.replace(/"/,'"');return s} h = '<a href="' + linkEscape(location.href) + '">' + htmlEscape(document.title) + '</a>'; with(window.open().document){write(h+'<form name=f><textarea name=a rows=5 cols=80 wrap=hard>'+htmlEscape(h)+'</textarea></form>'); close(); f.a.select(); } void 0

Description 
"Creates the HTML code to link to the current page. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#make_link
named anchors[edit]

javascript:(function(){var atags,i,name,a; anchs = document.anchors; for(i=0; i<anchs.length; ++i) { a = anchs[i]; name = a.name; a.appendChild(document.createTextNode("#" + name)); a.style.border = "1px solid"; a.href = "#" + name; } })();

Description 
"Makes anchors visible, letting you link to or bookmark a section of a page. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#named_anchors
onerror status[edit]

javascript:(function() { var i=0; window.onerror = function(m,u,n) { window.status = "JS Error #" + ++i + ": '" + m + "' " + (/^javascript:/(u) ? "(bookmarklet)" : "(line " + n + " of " + u + ")"); return true;/*suppress default error message*/ }})();

Description 
"When a JavaScript error occurs, shows the error message in the status bar. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#onerror_status
onerror alert[edit]

javascript:window.onerror = function(m,u,n) { alert("JS error: " + m + (/^javascript:/(u) ? "\n\n(bookmarklet)" : "\n\nLine " + n + " of \n" + u)); return true;/*suppress default error message*/ }; void 0

Description 
"When a JavaScript error occurs, shows the error message in a dialog. "
From 
http://www.squarefree.com/bookmarklets/webdevel.html#onerror_alert

Validation Bookmarklets[edit]

validate html[edit]

javascript:(function(){ function fixFileUrl(u) { var windows,u; windows = (navigator.platform.indexOf("Win") != -1); /* chop off file:///, unescape each %hh, convert / to \ and | to : */ u = u.substr(windows ? 8 : 7); u = unescape(u); if(windows) { u = u.replace(/\//g,"\\"); u = u.replace(/\|/g,":"); } return u; } /* bookmarklet body */ var loc,fileloc; loc = document.location.href; if (loc.length > 9 && loc.substr(0,8)=="file:///") { fileloc = fixFileUrl(loc); if (prompt("Copy filename to clipboard, press enter, paste into validator form", fileloc) != null) { document.location.href = "http://validator.w3.org/file-upload.html" } } else document.location.href = "http://validator.w3.org/check?uri=" + escape(document.location.href); void(0); })();

Description 
"Validates HTML using the <a href="http://www.w3.org/">W3C</a> <a href="http://validator.w3.org/">HTML validator</a>. "
From 
http://www.squarefree.com/bookmarklets/validation.html#validate_html




quick validate[edit]

javascript:location = 'http://validator.w3.org/check?uri=' + escape(location) + ((document.doctype && document.doctype.toString()) ? '' : '&doctype=HTML+4.01+Transitional') + '&charset=' + document.characterSet + '&ss=1';

Description 
"Validates HTML, avoiding "missing doctype" and "missing charset" errors. "
From 
http://www.squarefree.com/bookmarklets/validation.html#quick_validate




netcraft[edit]

javascript:location = 'http://uptime.netcraft.com/up/graph?site='+escape(location); void 0

Description 
"Tells you what type of server a site uses and displays an uptime graph. "
From 
http://www.squarefree.com/bookmarklets/validation.html#netcraft




http headers[edit]

javascript:document.location.href = 'http://webtools.mozilla.org/web-sniffer/view.cgi?url=' + escape(document.location.href)

Description 
"Uses <a href="http://webtools.mozilla.org/web-sniffer/">Web Sniffer</a> to display HTTP headers. "
From 
http://www.squarefree.com/bookmarklets/validation.html#http_headers




grayscale[edit]

javascript:document.body.style.filter='gray';void(0);

Description 
"Applies a "black and white TV" filter to the page. "
From 
http://www.squarefree.com/bookmarklets/validation.html#grayscale




PDAize[edit]

javascript:var s=document.createElement('link');s.setAttribute('href','http://www.ressukka.net/misc/pdaize.css');s.setAttribute('rel','stylesheet');s.setAttribute('type','text/css'); document.getElementsByTagName('head')[0].appendChild(s);var l=document.getElementsByTagName('img');for(var i=0;il.length;i++){if(l[i].width>176){l[i].height*=176/l[i].width;l[i].width=176}else if(l[i].naturalWidth>176){var e=176/l[i].naturalWidth;l[i].height=l[i].naturalHeight*e;l[i].width=176;}}void(0);

Description 
"Lets you see what a page might look like on a PDA. "
From 
http://www.squarefree.com/bookmarklets/validation.html#PDAize




linearize[edit]

javascript:(function(){var D=document,e,styles="table,thead,tbody,tr,th,td{display:block!important;}*{width:auto!important;height:auto!important;position:static!important;float:none!important;margin-left:0!important;margin-right:0!important;} img,iframe,embed,object{display:none;} body {margin:4px!important;}"; e=D.createElement('link'); e.rel='stylesheet'; e.href=window.opera ? "javascript:'"+styles+"'" : "data:text/css,"+styles; D.getElementsByTagName("head")[0].appendChild(e)})()

Description 
"Linearizes the text of the page and removes most non-text elements. "
From 
http://www.squarefree.com/bookmarklets/validation.html#linearize




check images[edit]

javascript:(function(){var ims=document.images, brokenCount=0, brokenURLs="", text, i; for(i=0;i<ims.length;++i) if (! (ims[i].naturalHeight || ims[i].fileSize > 0)) { ++brokenCount; brokenURLs += "URL: " + ims[i].src + "\n"; }; text = brokenCount + " broken image" + (brokenCount==1?"":"s"); if(brokenCount) alert(text + ":\n\n" + brokenURLs); else alert("No broken images."); })()

Description 
"Lists the URLs of broken images. "
From 
http://www.squarefree.com/bookmarklets/validation.html#check_images




zap images[edit]

javascript:(function(){function toArray (c){var a, k;a=new Array;for (k=0; k < c.length; ++k)a[k]=c[k];return a;}var images, img, altText;images=toArray(document.images);for (var i=0; i < images.length; ++i){img=images[i];altText=document.createTextNode(img.alt);img.parentNode.replaceChild(altText, img)}})();

Description 
"Replaces each image with its <a href="http://ppewww.ph.gla.ac.uk/%7Eflavell/alt/alt-text.html">alternate text</a>. "
From 
http://www.squarefree.com/bookmarklets/validation.html#zap_images




check alts[edit]

javascript:(function(){function d(s){return s==null?"missing":"\""+s+"\""}var c=[0,0,0],i,P,a,y,D=document; if(D.createElement("img").getAttribute("alt")!=null)alert("Your browser misreports missing alts as empty alts.");for(i=0;P=D.images[i];++i){a=P.getAttribute("alt");y=!!a+(a!=null);++c[y];P.style.border="2px "+["dotted red","dashed #888","solid green"][y];P.title="Alt: "+d(a)+", Title: "+d(P.getAttribute("title"));}top.status="Image alt texts: "+c[0]+" missing, "+c[1]+" empty, "+c[2]+" present"})()

Description 
"Shows which images have missing and empty alts using borders and tooltips. "
From 
http://www.squarefree.com/bookmarklets/validation.html#check_alts




list alts[edit]

javascript:(function(){var A={},B=[],D=document,i,e,a,k,y,s,m,u,t,r,j,v,h,q,c,G;function C(t){return D.createElement(t)}function P(p,c){p.appendChild(c)}function T(t){return D.createTextNode(t)}for(i=0;e=D.images[i];++i){a=e.getAttribute("alt");k=escape(e.src)+"%"+(a!=null)+a;if(!A[k]){y=!!a+(a!=null);s=C("span");s.style.color=["red","gray","green"][y];s.style.fontStyle=["italic","italic",""][y];P(s,T(["missing","empty",a][y]));m=e.cloneNode(true);if(m.width>350)m.width=350;B.push([0,7,T(e.src.split('/').reverse()[0]),m,s]);A[k]=B.length;}u=B[A[k]-1];u[1]=(T(++u[0]));}t=C("table");t.border=1;r=t.createTHead().insertRow(-1);for(j=0;v=["#","Filename","Image","Alternate text"][j];++j){h=C("th");P(h,T(v));P(r,h);}for(i=0;q=B[i];++i){r=t.insertRow(-1);for(j=1;v=q[j];++j){c=r.insertCell(-1);P(c,v);}}G=open().document;G.open();G.close();P(G.body,t);})()

Description 
"Lists images and their alternate text (or "missing" or "empty"). "
From 
http://www.squarefree.com/bookmarklets/validation.html#list_alts




blogidate html4.01 transitional[edit]

javascript:(function(){var s,d,f,i,x,u; s='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title></title></head><body><div>';function R(w){var i,x; for(i=0;x=w.document.getElementsByTagName("textarea")[i];++i){s+=x.value;u=true;} for(i=0;x=w.frames[i];++i)try{R(x)}catch(e){};};R(top); s+="\n</div></body></html>"; if(!u){alert("No textareas to validate!"); return; } d=open().document; d.write('<body><form action=http://www.htmlhelp.com/cgi-bin/validate.cgi method=post>'); f=d.forms[0]; for(i=0;x=["area","warnings","input"][i];++i) { d.write("<input type=hidden name="+x+">"); f[i].value=[s,"yes","yes"][i]; } f.submit(); })()

Description 
"Validates HTML fragments in textareas. "
From 
http://www.squarefree.com/bookmarklets/validation.html#blogidate_html4.01_transitional




blogidate html4.01 strict[edit]

javascript:(function(){var s,d,f,i,x,u; s='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><title></title></head><body><div>';function R(w){var i,x; for(i=0;x=w.document.getElementsByTagName("textarea")[i];++i){s+=x.value;u=true;} for(i=0;x=w.frames[i];++i)try{R(x)}catch(e){};};R(top); s+="\n</div></body></html>"; if(!u){alert("No textareas to validate!"); return; } d=open().document; d.write('<body><form action=http://www.htmlhelp.com/cgi-bin/validate.cgi method=post>'); f=d.forms[0]; for(i=0;x=["area","warnings","input"][i];++i) { d.write("<input type=hidden name="+x+">"); f[i].value=[s,"yes","yes"][i]; } f.submit(); })()

Description 
"Validates HTML fragments in textareas. "
From 
http://www.squarefree.com/bookmarklets/validation.html#blogidate_html4.01_strict




blogidate xhtml1 transitional[edit]

javascript:(function(){var s,d,f,i,x,u; s='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title></title></head><body><div>';function R(w){var i,x; for(i=0;x=w.document.getElementsByTagName("textarea")[i];++i){s+=x.value;u=true;} for(i=0;x=w.frames[i];++i)try{R(x)}catch(e){};};R(top); s+="\n</div></body></html>"; if(!u){alert("No textareas to validate!"); return; } d=open().document; d.write('<body><form action=http://www.htmlhelp.com/cgi-bin/validate.cgi method=post>'); f=d.forms[0]; for(i=0;x=["area","warnings","input"][i];++i) { d.write("<input type=hidden name="+x+">"); f[i].value=[s,"yes","yes"][i]; } f.submit(); })()

Description 
"Validates XHTML fragments in textareas. "
From 
http://www.squarefree.com/bookmarklets/validation.html#blogidate_xhtml1_transitional




blogidate xhtml1 strict[edit]

javascript:(function(){var s,d,f,i,x,u; s='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html><head><title></title></head><body><div>';function R(w){var i,x; for(i=0;x=w.document.getElementsByTagName("textarea")[i];++i){s+=x.value;u=true;} for(i=0;x=w.frames[i];++i)try{R(x)}catch(e){};};R(top); s+="\n</div></body></html>"; if(!u){alert("No textareas to validate!"); return; } d=open().document; d.write('<body><form action=http://www.htmlhelp.com/cgi-bin/validate.cgi method=post>'); f=d.forms[0]; for(i=0;x=["area","warnings","input"][i];++i) { d.write("<input type=hidden name="+x+">"); f[i].value=[s,"yes","yes"][i]; } f.submit(); })()

Description 
"Validates XHTML fragments in textareas. "
From 
http://www.squarefree.com/bookmarklets/validation.html#blogidate_xhtml1_strict




blogidate xml well-formedness[edit]

javascript:(function(){var u; function recurse(w){var i,x; for(i=0;x=w.document.getElementsByTagName("textarea")[i];++i){checkWellFormedness(x, w.document);u=true;} for(i=0;x=w.frames[i];++i)try{recurse(x)}catch(e){}} recurse(top); if(!u){alert("No textareas to validate!"); } function changeBackground(ta, c) { ta.style.backgroundColor = c; ta.style.color = "#000"; ta.addEventListener("input", f, false); function f() { this.removeEventListener("input", f, false); this.style.backgroundColor="#fff"; window.status = ""; } } function checkWellFormedness(ta, doc) { var x,de,error,line,column,lines,cc,i,spot; x=doc.createElement("iframe"); x.style.display="none"; x.onload = g; function g() { window.status = window.status;/*Prevent "done" for second textarea from overriding error message for first textarea*/ de = x.contentDocument.documentElement; if(de.tagName == "testroot") { changeBackground(ta, "#bfb"); } else if (de.tagName == "parsererror") { changeBackground(ta, "#fdd"); de.normalize(); error = de.childNodes[0].data.split("\n"); if(/(\d+)[^\d]+(\d+)/(error[2])) { line = parseInt(RegExp.$1); column = parseInt(RegExp.$2); window.status = "Line " + (line-2) + " column " + column + ": " + error[0]; lines = ta.value.split("\n"); cc = 0; for(i=0; i < (line-3); ++i) cc += lines[i].length + 1; spot = Math.min(cc + (column - 1), ta.value.length - 1); ta.focus(); ta.selectionStart = spot; ta.selectionEnd = spot + 2; } else alert("No line number information!?") } else alert("Unexpected root!? " + de.tagName);}; x.src='data:text/xml;charset=UTF-8,' + encodeURIComponent('<?xml version="1.0" encoding="UTF-8" ?>\n<testroot>\n' + (ta.value) + '</testroot>'); doc.body.appendChild(x); } })()

Description 
"Quickly checks the well-formedness of XML fragments in textareas. "
From 
http://www.squarefree.com/bookmarklets/validation.html#blogidate_xml_well-formedness

Miscellaneous Bookmarklets[edit]

up[edit]

javascript:if (location.pathname == "/"); else if (location.pathname.charAt(location.pathname.length-1) == "/") location = ".."; else location = "."; void 0

Description 
"Goes up a directory from the page you're viewing. "
From 
http://www.squarefree.com/bookmarklets/misc.html#up
top[edit]

javascript:location.pathname = ""; void 0

Description 
"Goes to the top level of the site. "
From 
http://www.squarefree.com/bookmarklets/misc.html#top
increment[edit]

javascript:(function(){ var e,s; IB=1; function isDigit(c) { return ("0" <= c && c <= "9") } L = location.href; LL = L.length; for (e=LL-1; e>=0; --e) if (isDigit(L.charAt(e))) { for(s=e-1; s>=0; --s) if (!isDigit(L.charAt(s))) break; break; } ++s; if (e<0) return; oldNum = L.substring(s,e+1); newNum = "" + (parseInt(oldNum,10) + IB); while (newNum.length < oldNum.length) newNum = "0" + newNum; location.href = L.substring(0,s) + newNum + L.slice(e+1); })();

Description 
"Increases the last number in the URL by 1. "
From 
http://www.squarefree.com/bookmarklets/misc.html#increment
decrement[edit]

javascript:(function(){ var e,s; IB=-1; function isDigit(c) { return ("0" <= c && c <= "9") } L = location.href; LL = L.length; for (e=LL-1; e>=0; --e) if (isDigit(L.charAt(e))) { for(s=e-1; s>=0; --s) if (!isDigit(L.charAt(s))) break; break; } ++s; if (e<0) return; oldNum = L.substring(s,e+1); newNum = "" + (parseInt(oldNum,10) + IB); while (newNum.length < oldNum.length) newNum = "0" + newNum; location.href = L.substring(0,s) + newNum + L.slice(e+1); })();

Description 
"Decreases the last number in the URL by 1. "
From 
http://www.squarefree.com/bookmarklets/misc.html#decrement
make numbered list[edit]

javascript:(function(){ function selectColor(i) { return ["#fdc", "#cdf", "#bfd", "#dbf", "#fbd"] [i%5]; } var u=location.href, ul=u.length; var tparts=[""], zparts=[], nz=0; function isDigit(c) { return ("0" <= c && c <= "9"); } for (i=0; i<ul; ) { for (; i<ul && !isDigit(u.charAt(i)); ++i) tparts[nz] += u.charAt(i); if(i<ul) { zparts[nz]=""; for (; i<ul && isDigit(u.charAt(i)); ++i) zparts[nz] += u.charAt(i); tparts[nz+1]=""; ++nz; } } if(!nz) { alert("No numbers in URL."); return; } D=window.open().document; D.write(); D.close(); function a(n) { A(D.body,n); } function A(p,n) { p.appendChild(n); } function E(q) { return D.createElement(q); } function cT(t) { return D.createTextNode(t) } function cBR() { return E("br"); } function cS(t,ci) { var s=E("span"); s.style.background=selectColor(ci); s.style.fontWeight="bold"; A(s, cT(t)); return s; } function cTB(v,oc) { var b=E("input"); b.size=6; b.value=v; b.addEventListener("input", oc, false); return b; } function cCB(t,oc) { var L=E("label"), b=E("input"); b.type="checkbox"; b.checked=true; b.onchange=oc; A(L,b); A(L,cT(t)); return L; } function cL(nz,tparts,zparts) { var L=E("a"); var u=""; for (var i=0; i<nz; ++i) { A(L,cT(tparts[i])); A(L,cS(zparts[i], i)); u += tparts[i]+zparts[i]; } A(L,cT(tparts[nz])); u += tparts[nz]; L.href=u; L.target="_blank"; return L; } a(cT("Original URL: ")); a(cBR()); a(cL(nz, tparts, zparts)); a(cBR()); a(cBR()); var fromBoxes=[], toBoxes=[], padChecks=[]; for (i=0; i<nz; ++i) { a(cT("Run ")); a(cS(zparts[i], i)); a(cT(" from ")); a(fromBoxes[i]=cTB(zparts[i], listURLs)); a(cT(" to ")); a(toBoxes[i]=cTB(zparts[i], listURLs)); a(cT(" (")); a(j=cCB(" Pad with zeroes to maintain length", listURLs)); padChecks[i]=j.childNodes[0]; a(cT(")")); a(cBR()); } a(cBR()); resultDiv=E("div"); a(resultDiv); listURLs(); function listURLs() { while (resultDiv.childNodes.length) resultDiv.removeChild(resultDiv.childNodes[0]); var lows=[], highs=[]; for (i=0; i<nz; ++i) { lows[i]=parseInt(fromBoxes[i].value, 10); highs[i]=parseInt(toBoxes[i].value, 10); if(highs[i]-lows[i] > 999) { A(resultDiv, cT("Too many")); return; } } urls=[]; function cb(sta) { var newzparts=[]; for (var i=0; i<nz; ++i) { var z=""+sta[i]; if(padChecks[i].checked) while (z.length < zparts[i].length) z="0"+z; newzparts[i]=z; } A(resultDiv, cL(nz, tparts, newzparts)); A(resultDiv, cBR()); } fors(nz, cb, lows, highs); } function fors (n, callback, lows, highs) { function fors_inner (states, v) { if(v >= n) callback(states); else for (states[v]=lows[v]; states[v] <= highs[v]; ++(states[v])) fors_inner(states, v+1); } fors_inner ([], 0); } })()

Description 
"Creates a list of URLs with each number looped through a range you specify. "
From 
http://www.squarefree.com/bookmarklets/misc.html#make_numbered_list
go to referrer[edit]

javascript:if(!document.referrer) alert("No referrer!"); else document.location = document.referrer; void 0

Description 
"Like clicking Back, but works even after opening a link in a new window. "
From 
http://www.squarefree.com/bookmarklets/misc.html#go_to_referrer
back to first[edit]

javascript:for(i=1; i<=history.length; ++i) history.go(-i); void 0

Description 
"Goes to the first page in this window's history. "
From 
http://www.squarefree.com/bookmarklets/misc.html#back_to_first
add sidebar[edit]

javascript:(function(){var x; x=prompt('Sidebar title:', document.title); if (x != null) { window.sidebar.addPanel(x,location.href,''); } })();

Description 
"Adds the page you're viewing as sidebar panel. "
From 
http://www.squarefree.com/bookmarklets/misc.html#add_sidebar
domain owner[edit]

javascript:(function(){var h,p; h = location.host.split('.'); p = h.length; if (h[p-1].match(/com$|net$|org$|edu$/i)) { location = 'http://www.netsol.com/cgi-bin/whois/whois?SearchType=do&STRING=' + h[p-2] + '.' + h[p-1]; } else { alert('This bookmarklet can only look up owners for .com, .net, .org, and .edu domains.'); } void(0); })();

Description 
"Tells you who owns the domain of the page you're viewing. "
From 
http://www.squarefree.com/bookmarklets/misc.html#domain_owner
edit page[edit]

javascript:document.body.contentEditable = 'true'; document.designMode='on'; void 0

Description 
"Lets you edit the page. "
From 
http://www.squarefree.com/bookmarklets/misc.html#edit_page
view cookies[edit]

javascript:alert('Cookies stored by this host or domain:\n\n' + document.cookie.replace(/; /g,'\n'));

Description 
"Shows the cookies stored by the page you're viewing. "
From 
http://www.squarefree.com/bookmarklets/misc.html#view_cookies
transfer cookies[edit]

javascript:h=location.host;z="Bookmarklet: <a href=\"javascript:if(location.host!='"+h+"')location='http://"+h;v=document;function s(c,y){v.cookie=a=c+"; domain="+d+"; path=/; expires="+new Date((new Date).getTime()+y*1e11).toGMTString()}C=v.cookie.split("; ");d=".."+h;while(d=(""+d).substr(1).match(/\..*$/))for(i in C)if(c=C[i]){s(c.match(/.*=/)+C,1);q=v.cookie;q.split(";").length>C.length?s(c,-1):q.match(C)?(s(c,1),z=a+"<br>"+z+"';document.cookie='"+a):0}v.write(z+"';[].v\">my "+h+" cookies</a>")

Description 
"Creates a bookmarklet you can use to move cookies to another browser. "
From 
http://www.squarefree.com/bookmarklets/misc.html#transfer_cookies
zap cookies[edit]

javascript:(function(){C=document.cookie.split("; ");for(d="."+location.host;d;d=(""+d).substr(1).match(/\..*$/))for(sl=0;sl<2;++sl)for(p="/"+location.pathname;p;p=p.substring(0,p.lastIndexOf('/')))for(i in C)if(c=C[i]){document.cookie=c+"; domain="+d.slice(sl)+"; path="+p.slice(1)+"/"+"; expires="+new Date((new Date).getTime()-1e11).toGMTString()}})()

Description 
"Removes cookies set by the site, including cookies with paths and domains. "
From 
http://www.squarefree.com/bookmarklets/misc.html#zap_cookies
babelfish[edit]

javascript:(function() { var d,b,f,u,L,i,K,t, LL="zh Chinese-simplified,zt Chinese-traditional,nl Dutch,fr French,de German,el Greek,it Italian,ja Japanese,ko Korean,pt Portuguese,ru Russian,es Spanish".split(","); d=open().document; b=d.body; f=d.createElement("form"); b.appendChild(f); f.action="http://babelfish.altavista.com/babelfish/trurl_pagecontent"; u=d.createElement("input"); u.name="url"; u.style.width="100%"; u.value=location; f.appendChild(u); for (i=0; L=LL[i]; ++i) { K = L.split(" "); f.appendChild(d.createElement("br")); t=d.createElement("button"); t.name="lp"; t.value=K[0]+"_en"; t.innerHTML = "<b>" + K[1] + "</b> to English"; f.appendChild(t); } })()

Description 
"Translates from 11 languages (you choose the language) to English. "
From 
http://www.squarefree.com/bookmarklets/misc.html#babelfish
google translate[edit]

javascript:location='http://translate.google.com/translate?u=' + encodeURIComponent(location);

Description 
"Translates from 5 languages (it guesses the language) to English. "
From 
http://www.squarefree.com/bookmarklets/misc.html#google_translate
    • Search Engine Optimization Bookmarklets
      • find links to squarefree
      • google backlinks
      • atw internal backlinks
      • atw external backlinks
      • atw plaintext backlinks
      • google site search: all
      • atw site search: all
      • number google hits
      • open in ie
      • word frequency
    • Log Analysis Bookmarklets
      • linkify
      • query as link text
      • find links to squarefree
    • Keyword Bookmarklets for Scripters
      • j (statement)
      • ja (expression)
      • jb (node)
      • jp (object)
      • jcs (node)
    • Flash Bookmarklets
      • seek bar
      • seek bar for IE
      • pause
      • rewind
      • fast-forward
      • rewind 5s
      • forward 5s
    • Search bookmarklets
      • google
      • google site search
      • google site search: all
      • google site search: title
      • num=100
      • num=10
      • num=1
      • filter=0
      • @google
      • @alltheweb
      • @teoma
      • @msn
      • @altavista
      • wayback newest
      • wayback search

Bookmarklets.com[edit]

    • Page Data http://bookmarklets.com/tools/data/index.phtml
      • Page Freshness? - date of last modification
      • List Email Links - mailto
      • Number of Links
      • List All Links
      • Display Images - show all images in a list
      • Find Phone Numbers
      • Document Size in Windowfulls
      • Send Location
      • Send Selected Text
      • Make Page with Selection
      • Edit Copy of Selection
      • Number of Words in Selection
      • List Words in Selected Text
      • Statusbar Shows URL - zap javascript onmouseover handlers
    • Navigation http://bookmarklets.com/tools/navigation/index.phtml
      • Go to Random Link
      • Go to Selected URL - i.e. even non-hyperlinked urls
      • Duplicate Page
      • Previous Page in New Window -referring page actually
      • Up a Directory
      • Set In-Page Bookmark
      • Go To In-Page Bookmark
      • Add Domain to Favorites
      • Find Any in Page...
      • Speed Reader - 3 speeds available
      • Show Occurrences of Word - one after another
      • Go to First Page in Window
      • Go to Previous Page in Website
      • Back All Frames to Beginning
      • Back, Forward, Reload, Home, Find, Stop - standard navigation buttons
      • Back2, Back3
      • Target Links to New
      • Target Links to Special
      • Target Links to Top
      • Target Links to Self
      • Show robots.txt for this Domain
      • Make Link for Page
    • Page Look http://bookmarklets.com/tools/look/index.phtml
      • Page Color - background color
      • Page Color to White
      • Remove Background Image
      • Text Color...
      • Zoom on First Image
      • Hide All Images
      • Hide 468 x 60 Banners
      • Biggest Frame to Top - de-frame websites
      • Scroll Page - auto-scroll
      • Scroll Page... (variable) - auto-scroll
      • Text Font to Verdana
      • Text Font to Arial
      • Split Frames into Windows
      • Underlines Off/On
      • Highlight Links
      • Mega Blink
    • Windowing http://bookmarklets.com/tools/windowing/index.phtml
      • Move Window Behind
      • Center Window
      • Align Window to Nearest Corner
      • Align Window to Nearest Side
      • Resize Window to Narrow
      • Resize Window to 640 x 480, 800 x 600, Full Screen
      • Resize Window to Quarter
      • Setup 2 Windows
      • Setup 4 Windows
      • Make Link to Page & Window
    • Misc http://bookmarklets.com/tools/misc/index.phtml
      • Date and Time
      • Days Left this Year
      • Tile Image or Animation...
      • Backdrop
      • Stop Music
      • Activate New Plugin
      • IP Address
      • Read Cookie for Site
      • Record Comment for Site
      • Read Comment for Site
      • Personal Note...
      • AutoFill Anonymous
      • Make Mailto Bookmarklet...
      • Make Mail Folder Bookmarklet...
      • Executive Dice Roller...
      • Confidence Booster
      • Lyrics for "99 Bottles of Beer"
      • ROT13 Encoder/Decoder
      • Valentine
      • Dancing Netscape Logo
    • Search http://bookmarklets.com/tools/search/index.phtml
      • More Info About - http://bookmarklets.com/moreinfo.phtml - a meta search system
      • Other Search tools
        • Search
          • Search Alta Vista...
          • Search Lycos...
          • Search WebCrawler...
          • Search Google...
          • Search Northern Light...
          • Smart Browsing...
        • Directories
          • Search Yahoo...
          • Search LookSmart...
          • Search Open Directory...
          • Search The Mining Co. ...
        • Metasearch
          • Search MetaCrawler...
          • Search Inference Find...
          • Search SavvySearch...
          • Search Metafind...
          • Search Dogpile...
          • Search Mamma...
        • News
          • Search CNN News...
          • Search Wired News...
          • Search ABC News...
          • Search News.com...
        • Discussion groups
          • Search Discussion Groups...(DejaNews)
          • Search eGroup Discussion Groups...
          • Search Mailing Lists (Reference.com)
          • Discusion Group Author Profile (DejaNews)
          • Search for Mailing List (Vivian)
          • Search for Mailing List (Liszt)
          • Search for Mailing List (Tile.net)
        • Images
          • Icon Search (Icon Bank)
          • Video Search (WebSEEk)
          • Philip Greenspun's Images...
          • AltaVista Photo Finder...
          • Sunsite Image Finder...
          • Lycos Picture Search...
          • Yahoo Picture Search...
        • Words
          • Thesaurus... (Roget)
          • Phrase Finder...
          • English Dictionary... (Dictionary.com)
          • English Dictionary-Thesaurus... (Wordsmyth)
          • Search for Cliche...(Cliche Finder)
          • Search Dictionary...(UCSD Webster)
          • Acronym or Abbreviation...
          • Search American Literature... (HTI)
          • Search TechEncyclopedia...
          • Search the Quran
          • Search the King James Bible
        • Music
          • Search OLGA...
          • Find CD Track Title... (cddb)
          • Song Lyrics... (Lyrics Server)
          • Search for WAV files... (Filez)
        • Design
          • What's that site running? (Netcraft)
          • Validate HTML (W3C)
          • Search PHP list...
          • JavaScript Info...(Sprockets)
          • Developer Info...(DevSearch)
        • Misc
          • Map of (non-U.S.) City... (MapBlast)
          • Stock Quotes (Nasdaq)...
          • Stock quotes - by name (Pathfinder)
          • Search for Movies... (Filez)
          • Find a Recipe... (SOAR)
          • Find a Gourmet Recipe...
          • Home Maintenance and Repair...
          • Search Pathfinder (Time, Life,...)
        • Software
          • Software Metasearch... (Softcrawler)
          • Windows Shareware... (Shareware.com)
          • Search for Windows Files... (Filez)
          • Macintosh Shareware... (Shareware.com)
          • Search for Macintosh Files... (Filez)
        • People
          • Reverse phone lookup... (Infospace)
          • Find somebody's homepage... (Googol)
          • Search Biography...
        • Health
          • Search Virtual Hospital...
          • Search KidsHealth...
          • Search Your Health Daily...
          • Search Merck Manual...
    • Calculator and Converter tools http://bookmarklets.com/tools/convert/index.phtml
      • Calculator...
      • Download Calculator...
      • Salary Calculator...
      • Average...
      • Add to Running Total...
      • Subtract from Running Total...
      • Report Running Total...
      • Clear Running Total
      • Converters
        • Temperature - Fahrenheit to Celsius...
        • Length - Inches to Millimeters...
        • Length - Inches to Centimeters...
        • Length - Yards to Meters...
        • Length - Miles to Kilometers...
        • Area - Square Feet to Square Meters...
        • Area - Square Miles to Square Kilometers...
        • Area - Acres to Hectares...
        • Weight - Fluid Ounces to Grams...
        • Weight - Pounds to Kilograms...
        • Weight - U.S. Tons to Metric Tons...
        • Volume - Ounces to Milliliters...
        • Volume - Pints to Liters...
        • Volume - Quarts to Liters...
        • Volume - Gallons to Liters...
        • (and reverse versions for all of these)
    • Design - developer - http://bookmarklets.com/tools/design/index.phtml
      • 216 Standard Colors
      • RGB to Hex... - and reverse
      • Basic ISO Latin Characters
      • Character to ASCII - and reverse
      • Escape for Symbol
      • Simple Table Code
      • Screen Properties
      • Reformat Form
      • Edit HTML of Page
      • Find and Replace in Source...
      • Bookmarklets Editor
      • Length of String...
      • Ugly Variable Generator
      • Bookmarklet to Function

Gazingus.org[edit]

Scribbling.net[edit]

The ly detector[edit]

javascript:function hl(node,word,re){if(node.hasChildNodes) {var hi_cn;for (hi_cn=0;hi_cn<node.childNodes.length;hi_cn++) {hl(node.childNodes[hi_cn],word,re);}}if (node.nodeType == 3) { tempNodeVal = node.nodeValue.toLowerCase();tempWordVal = word.toLowerCase();if (re.test(tempNodeVal)) {pn = node.parentNode;if (pn.className != word) {nv = node.nodeValue;ni = tempNodeVal.indexOf(tempWordVal);before = document.createTextNode(nv.substr(0,ni));docWordVal = nv.substr(ni,word.length);after = document.createTextNode(nv.substr(ni+word.length));hiwordtext = document.createTextNode(docWordVal);hiword = document.createElement('span');hiword.className=word;hiword.style['backgroundColor']='yellow';hiword.appendChild(hiwordtext);pn.insertBefore(before,node);pn.insertBefore(hiword,node);pn.insertBefore(after,node);pn.removeChild(node);}}}}var lyRE=/(\w)(ly)(\b)/gim;hl(document.getElementsByTagName('body')[0],'ly',lyRE);

Description 
A bookmarklet ... which will highlight all the words on a web page which end in -ly.
From 
http://www.scribbling.net/the_ly_detector

Analyze Page Links[edit]

javascript:var total = 0;var internal = 0;var external = 0;for (i=0;i<document.links.length;i++) {if (document.links[i].protocol=='http:'){if ( document.links[i].hostname == document.domain)internal++;else {external++;}total++;}}var pctInternal = Math.round((internal*100)/total);var pctExternal = 100-pctInternal;alert(document.location+'\nTotal document links: '+total+'\n'+pctInternal+'% internal links \n'+pctExternal + '% external links');

Description 
Shows stats for # of links, % external, and % internal.
From 
http://scribbling.net/analyze-web-page-links

Ftrain.com[edit]

The Passivator[edit]

javascript:var verbsRE=/(\b)(i\'m|it\'s|he\'s|here\'s|she\'s|that\'s|there\'s|they\'re|we\'re|what\'s|who\'s|you\'re|is|are|am|are|was|were|be|being|been|go)(\b)/gi;var lyRE=/(\w)(ly)(\b)/gim;function HL(node){if(node.hasChildNodes){var hi_cn;for(hi_cn=0;hi_cn<node.childNodes.length;hi_cn++){HL(node.childNodes[hi_cn]);}}if(node.nodeType==3){var tempNodeVal=node.nodeValue;if(verbsRE.test(tempNodeVal)){tempNodeVal=tempNodeVal.replace(verbsRE,"$1<span style='background-color:yellow;color:black;border:1px solid black;'>$2</span>$3");tempNodeVal=tempNodeVal.replace(lyRE,"$1<span style='background-color:#0ff;color:black;border:1px solid black;'>$2</span>$3");newNode=document.createElement('span');newNode.innerHTML=tempNodeVal;pn=node.parentNode;pn.replaceChild(newNode,node);}}}HL(window.document.getElementsByTagName('body')[0]);

Description 
"A passive verb and adverb flagger for Mozilla-derived browsers, Safari, and Opera 7.5, with caveats." (quoted from source, see page for caveats and more details.)
From 
http://www.ftrain.com/ThePassivator.html

Kryogenix.org[edit]

Tantek.com[edit]

Authoring[edit]

Multivalidator: HTML, CSS & HREFs all in one. - validate pages[edit]
Multivalidator[edit]

javascript:if (0) void('Multivalidator script (c)2002 Tantek Celik - last modified 2002.03.15');var p27=String.fromCharCode(37)+'27',d=document.location,ft='%3Cframe ',fs=ft+'src=',fe='\' scrolling=\'auto\'>',fc=ft+'style=\'border:2px solid #ff0\' src=\'http://',fm='%3C/frameset>';var h=fs+'\'javascript:document.write('+p27+'%3C!DOCTYPE%20HTML%20PUBLIC%20%22-//W3C//DTD%20HTML%204.0//EN%22%3E%3Cbody%20style%3D%22margin:0;padding:2px%206px%22%3E';var h1='%3Ch1%20style%3D%22display:inline;font-size:18px;margin:0;%22%3E';var e='%3E%3C/body%3E'+p27+')\' scrolling=\'no\' noresize>';var q=String.fromCharCode(34);var r='%20results',v='%20validator'+r,w='validator.w3.org/check';var ds='%3C!DOCTYPE HTML PUBLIC '+q+'-//W3C//DTD HTML 4.0 Frameset//EN'+q+'>%3Chtml>%3Chead>%3Ctitle>Multivalidator%3C/title>%3C/head>%3Cframeset cols=\'50%,50%\'>%3Cframeset rows=\'24,*\'>';ds+=h+'%3Cdiv%3E'+h1+'Page:%3C/h1%3E'+d+'%3C/div'+e;e='%3C/h1'+e;h+='%3Ch1%20style%3D%22display:inline;font-size:18px;margin:0;%22%3E';ds+=h+'%3Cscript>document.location=%22'+d+'%22%3C/script>'+e+fm+'%3Cframeset rows=\'24,*,24,*,24,*\'>';ds+=h+'HTML'+v+'%3Ca%20title%3D%22Refresh%20to%20remultivalidate.%20Click%20for%20more%20info%20on%20favelets.%20-Tantek%22%20href%3Dhttp://favelets.com/%20target%3Dhelp%20style%3D%22float:right;padding:1px;width:1em;font:10px%20Avant%20Garde,Chicago,Times,Arial,serif;text-decoration:none%22>@%3C/a>'+e;ds+=fc+w+'?uri='+d+fe;ds+=h+'CSS'+v+e;ds+=fc+'jigsaw.w3.org/css-validator/validator?uri='+d+fe;ds+=h+'HREF%20checker'+r+e;ds+=fc+w+'link?url='+d+fe;ds+=fm+fm+'%3C/html>';document.open();document.write(ds);document.close();void(20020315);

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
Multivalidator Window[edit]

javascript:if (0) void('Multivalidator script (c)2002 Tantek Celik - last modified 2002.03.15');var p27=String.fromCharCode(37)+'27',d=document.location,ft='%3Cframe ',fs=ft+'src=',fe='\' scrolling=\'auto\'>',fc=ft+'style=\'border:2px solid #ff0\' src=\'http://',fm='%3C/frameset>';var h=fs+'\'javascript:document.write('+p27+'%3C!DOCTYPE%20HTML%20PUBLIC%20%22-//W3C//DTD%20HTML%204.0//EN%22%3E%3Cbody%20style%3D%22margin:0;padding:2px%206px%22%3E';var h1='%3Ch1%20style%3D%22display:inline;font-size:18px;margin:0;%22%3E';var e='%3E%3C/body%3E'+p27+')\' scrolling=\'no\' noresize>';var q=String.fromCharCode(34);var r='%20results',v='%20validator'+r,w='validator.w3.org/check';var ds='%3C!DOCTYPE HTML PUBLIC '+q+'-//W3C//DTD HTML 4.0 Frameset//EN'+q+'>%3Chtml>%3Chead>%3Ctitle>Multivalidator%3C/title>%3C/head>%3Cframeset cols=\'50%,50%\'>%3Cframeset rows=\'24,*\'>';ds+=h+'%3Cdiv%3E'+h1+'Page:%3C/h1%3E'+d+'%3C/div'+e;e='%3C/h1'+e;h+='%3Ch1%20style%3D%22display:inline;font-size:18px;margin:0;%22%3E';ds+=h+'%3Cscript>document.location=%22'+d+'%22%3C/script>'+e+fm+'%3Cframeset rows=\'24,*,24,*,24,*\'>';ds+=h+'HTML'+v+'%3Ca%20title%3D%22Refresh%20to%20remultivalidate.%20Click%20for%20more%20info%20on%20favelets.%20-Tantek%22%20href%3Dhttp://favelets.com/%20target%3Dhelp%20style%3D%22float:right;padding:1px;width:1em;font:10px%20Avant%20Garde,Chicago,Times,Arial,serif;text-decoration:none%22>@%3C/a>'+e;ds+=fc+w+'?uri='+d+fe;ds+=h+'CSS'+v+e;ds+=fc+'jigsaw.w3.org/css-validator/validator?uri='+d+fe;ds+=h+'HREF%20checker'+r+e;ds+=fc+w+'link?url='+d+fe;ds+=fm+fm+'%3C/html>';var w = window.open('about:blank','Multivalidator','toolbar=yes,status=yes,resizable=yes');w.document.write(ds);w.document.close();w.focus();void(20020315);

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
HTML[edit]
W3C beta validator[edit]

javascript:void(document.location='http://validator.w3.org:8001/check?uri='+escape(document.location))

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
W3C HTML validator[edit]

javascript:void(document.location='http://validator.w3.org/check?uri='+document.location)

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
WDG HTML validator[edit]

javascript:void(document.location='http://www.htmlhelp.com/cgi-bin/validate.cgi?url='+document.location)

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
W3C HREF validator[edit]

javascript:void(document.location='http://validator.w3.org/checklink?url='+document.location)

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
CSS[edit]
W3C CSS validator[edit]

javascript:void(document.location='http://jigsaw.w3.org/css-validator/validator?uri='+document.location)

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
Toggle CSS style sheets[edit]

javascript:var i=0;if(document.styleSheets.length>0){cs=!document.styleSheets[0].disabled;for(i=0;i<document.styleSheets.length;i++) document.styleSheets[i].disabled=cs;};void(cs=true);

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
Screen sizes[edit]
PocketPC, iPaq 240x320[edit]

javascript:void(window.resizeTo(240,320))

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
TV safe 544x372[edit]

javascript:void(window.resizeTo(544,372))

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
VGA 640x480[edit]

javascript:void(window.resizeTo(640,480))

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
SVGA 800x600[edit]

javascript:void(window.resizeTo(800,600))

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
XGA 1024x768[edit]

javascript:void(window.resizeTo(1024,768))

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
SXGA 1280x1024[edit]

javascript:void(window.resizeTo(1280,1024))

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
UXGA 1600x1200[edit]

javascript:void(window.resizeTo(1600,1200))

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

Learning[edit]

CSS[edit]
View style rules[edit]

javascript:if (false)void('View style rules script by Tantek Celik - last modified 1998.10.27');var whn = (window.location.toString().replace(/[^a-z0-9]/gi,'_'))+'_sr';var imn = 0,ln = 0,isn = 0,undefined,r=String.fromCharCode(13),i=0,j=0;var st = '<HTML><HEAD><TITLE>'+document.title+' Style Rules</TITLE></HEAD><BODY STYLE=\'background:white;color:black;font:9pt FixedSys,Monaco,monospace;margin:3px 4px\'><PRE STYLE=\'background:white;color:black;font:9pt FixedSys,Monaco,monospace\'>'+r;st += '/* Style Rules For '+document.location+' */'+r+r;function appendRules(ti,ss) {st += '/* '+ti+' */'+r+r;var j=0;for (j=0;j<ss.rules.length;j++){st+=ss.rules[j].selectorText + ' { ' + ss.rules[j].style.cssText + ' }'+r; }st += r+r;}function imf(im) { var k=0;for (k=0;k<im.imports.length;k++)void(imf(im.imports[k]));imn++;var imt = 'external (imported) style sheet '+imn+': '+im.href;void(appendRules(imt,im));}for (i=0;i<document.styleSheets.length;i++){var s = document.styleSheets[i];var tt = s.owningElement.title;for (j=0;j<s.imports.length;j++){void(imf(s.imports[j]));}if (s.owningElement.tagName == 'STYLE'){isn++;if (tt=='' || tt==undefined)tt = 'untitled inline style sheet '+isn;}else if (s.owningElement.tagName == 'LINK'){ln++;if (tt=='' || tt==undefined)tt = 'persistent external (linked) style sheet '+ln;else if (s.owningElement.rel.toString().indexOf('alternate')==-1)tt = 'preferred external (linked) style sheet \''+tt+'\'';else if (true)tt = 'alternate external (linked) style sheet \''+tt+'\'';tt += ': '+ s.href;}void(appendRules(tt,s));}st+=r+'</BODY></HTML>';var w = window.open('about:blank',whn,'menubar,resizable,scrollbars');w.document.write(st);w.document.close();w.focus();void(19981027);

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
View style sheets[edit]

javascript:if (false)void('View style sheets script by Tantek Celik - last modified 1998.10.20 ');var whn = (window.location.toString().replace(/[^a-z0-9]/gi,'_'))+'_ss';var imn = 0,ln = 0,isn = 0,sn = 0,undefined,i=0,j=0;for (i=0;i<document.styleSheets.length;i++){var s = document.styleSheets[i];var tt = s.owningElement.title;function imf(im) {var k=0;for (k=0;k<im.imports.length;k++)void(imf(im.imports[k]));sn++;imn++;var imt = 'imported style sheet '+imn;var w = window.open(im.href,whn+sn,'status,location,menubar,resizable,scrollbars');w.document.title = imt;w.document.createStyleSheet('');w.document.styleSheets[0].addRule('BODY','background:white;color:black;font:9pt FixedSys,Monaco,monospace;margin:3px 4px');w.document.styleSheets[0].addRule('PRE','background:white;color:black;font:9pt FixedSys,Monaco,monospace');w.focus();}for (j=0;j<s.imports.length;j++){void(imf(s.imports[j]));}if (s.owningElement.tagName == 'STYLE'){sn++;isn++;if (tt=='' || tt==undefined)tt = 'untitled inline style sheet '+isn;var t = '<HTML><HEAD><TITLE>'+tt+'</TITLE></HEAD><BODY STYLE=\'background:white;color:black;font:9pt FixedSys,Monaco,monospace;margin:3px 4px\'><PRE STYLE=\'background:white;color:black;font:9pt FixedSys,Monaco,monospace\'>';for (j=0;j<s.imports.length;j++){t+='@import url('+s.imports[j].href+')<BR>';}for (j=0;j<s.rules.length;j++){t+=s.rules[j].selectorText + ' { ' + s.rules[j].style.cssText + ' } <BR>'; } t+='</BODY></HTML>'; var w = window.open('about:blank',whn+sn,'menubar,resizable,scrollbars');w.focus();w.document.write(t);w.document.close();}else if (s.owningElement.tagName == 'LINK'){sn++;ln++;var w = window.open(s.href,whn+sn,'status,location,menubar,resizable,scrollbars');if (tt!= && tt!=undefined) w.document.title = tt;w.document.createStyleSheet();w.document.styleSheets[0].addRule('BODY','background:white;color:black;font:9pt FixedSys,Monaco,monospace;margin:3px 4px');w.document.styleSheets[0].addRule('PRE','background:white;color:black;font:9pt FixedSys,Monaco,monospace');w.focus();}}void(19981020);

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
HTTP[edit]
View HTTP headers[edit]

javascript:void(document.location='http://www.delorie.com/web/headers.cgi?url='+escape(document.location))

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
Scripts etc.[edit]
View scripts[edit]

javascript:if (false)void('View scripts script by Tantek Celik - last modified 1998.10.30');var whn = (window.location.toString().replace(/[^a-z0-9]/gi,'_'))+'_sc';var ln = 0,isn = 0,sn = 0,undefined,i=0,j=0;for (i=0;i<document.scripts.length;i++){var s = document.scripts[i];var tt = s.title;if (s.src=='' || s.src==undefined){sn++;isn++;if (tt=='' || tt==undefined)tt = 'untitled inline script '+isn;var t = '<HTML><HEAD><TITLE>'+tt+'</TITLE></HEAD><BODY STYLE=\'background:white;color:black;font:9pt FixedSys,Monaco,monospace;margin:3px 4px\'><PLAINTEXT>';t+=s.outerHTML; var w = window.open('about:blank',whn+sn,'menubar,resizable,scrollbars');w.document.write(t);w.document.close();w.focus();}else{sn++;ln++;var w = window.open(s.src,whn+sn,'status,location,menubar,resizable,scrollbars');if (tt!='' && tt!=undefined) w.document.title = tt;w.document.createStyleSheet('');w.document.styleSheets[0].addRule('BODY','background:white;color:black;font:9pt FixedSys,Monaco,monospace;margin:3px 4px');w.document.styleSheets[0].addRule('PRE,PLAINTEXT','background:white;color:black;font:9pt FixedSys,Monaco,monospace');w.focus();}}void(19981030);

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
View images[edit]

javascript:if (false)void('View images script by Tantek Celik - modified 2003.02.11');var n = (window.location.toString().replace(/[^a-z0-9]/gi,'_'))+'_im';var sn = 0,ud,i=0,r='\r';var ss = r;l=document.images.length;if (l==0) alert('No images to see here. Move along.');else for (i=0;i<l;i++){var s = document.images[i];var u = s.src;if (u!='' && u!=ud && ss.indexOf(r+u+r)==-1){ ss+=u+r;sn++;var w=window.open(s.src,n+sn,'height='+Math.max(s.height,32)+',width='+Math.max(s.width,32)+',status=no,location,menubar,resizable,scrollbars');w.focus();}}void(20030211);

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

Reading[edit]

Translation[edit]
Babelfish French to English[edit]

javascript:void(document.location='http://babelfish.altavista.com/babelfish/urltrurl?url='+escape(document.location)+'&lp=fr_en&tt=url')

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
Babelfish German to English[edit]

javascript:void(document.location='http://babelfish.altavista.com/babelfish/urltrurl?url='+escape(document.location)+'&lp=de_en&tt=url')

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
Babelfish Spanish to English[edit]

javascript:void(document.location='http://babelfish.altavista.com/babelfish/urltrurl?url='+escape(document.location)+'&lp=es_en&tt=url')

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
Babelfish Italian to English[edit]

javascript:void(document.location='http://babelfish.altavista.com/babelfish/urltrurl?url='+escape(document.location)+'&lp=it_en&tt=url')

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0
Babelfish Japanese to English[edit]

javascript:void(document.location='http://babelfish.altavista.com/babelfish/urltrurl?url='+escape(document.location)+'&lp=ja_en&tt=url')

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

Enhanced User Interface[edit]

Choose style sheet[edit]

javascript:if (false)void('Choose style sheet... script (C)1998-2001 Tantek Celik - last modified 2001.09.13');var undefined,i=0;var sheets = ',',options = '<OPTION selected>document default';for (i=0;i<document.styleSheets.length;i++){var s = document.styleSheets[i];var tt = s.owningElement.title;if (tt != '' && tt != undefined){if (sheets.indexOf(','+tt+',')==-1) {sheets += tt+',';options += '<OPTION>'+tt;}}}var ds = '<!DOCTYPE HTML PUBLIC %22-//W3C//DTD HTML 4.0 Transitional//EN%22 %22http://www.w3.org/TR/REC-html40/loose.dtd%22><HTML><HEAD><TITLE>Choose style sheet</TITLE><STYLE>SELECT{width:144px; border:medium solid #339;background:#DDD;font:menu} BODY{overflow:hidden;margin:0;text-align:center;background:#CCC} .h{position:absolute;right:1px;top:1px;width:1em;text-align:right;font:10px Avant Garde,Chicago,Times,Arial,serif;text-decoration:none}</STYLE><SCRIPT>function choosess(tt) { var undefined; var d = window.opener.document; for (i=0; i<d.styleSheets.length; i++) { var s = d.styleSheets[i]; var ti=s.owningElement.title; if (ti!=\'\' && ti!=undefined && ti!=tt) s.disabled = true; else s.disabled=false; }}</SCRIPT></HEAD><BODY><CENTER>';ds += '<BR><SELECT ID=S1 SIZE=4 ONKEYPRESS=\'var k = event.keyCode; if (k==13 || k==3 || k==27) { window.close();}; \' ONCHANGE=\'if (this.selectedIndex!=-1) choosess(this.options[this.selectedIndex].text);\'>'+options+'</SELECT><BR>';ds += '<a href=\'http://favelets.com/\' target=help class=h>@</a><br>';ds += '</CENTER></BODY></HTML> ';var w = window.open('about:blank','ChooseStyleSheet','height=90,width=164');w.document.write(ds);w.document.close();w.focus();w.document.getElementById('S1').focus();void(19981023);

From 
http://tantek.com/favelets/
License 
CC 2.0 by license: http://creativecommons.org/licenses/by/2.0

Pixy.cz[edit]

http://www.pixy.cz/pixylophone/favelets/ (Also includes many bookmarklets from created by others)

  • Checking the Code
    • LynxView of the document
    • Simple Dom inspector of the document
  • Styles and Stylesheets
    • List computed (cascaded) styles - old and new version
  • Page Design
    • Set background to white
    • Clear background
  • Page Info
    • View HTPP (sic) headers
    • View HTPP transaction
    • View passwords on the page (by Jakub Vrana)
  • Browser Window
    • Resize to full screen
    • Create comparing windows (vertical) - i.e. tile two windows
    • Create comparing windows (horizontal) - i.e. tile two windows

Liorean.web-graphics.com[edit]

Sam-i-am.com[edit]

  • http://sam-i-am.com/work/bookmarklets/dev_debugging.html
    • View Source - replacement for the browser view-source command
    • Send as Text - similar, but slightly more so (uses a server at sam-i-am.com)
    • Show Tables - turns on table borders (uses a server at sam-i-am.com)
    • Zoom In - IE only
    • Zoom Out - IE only
    • Element Ancestry - makes everything bring up a dialog listing it's parents
    • View DOM
    • View DOM Fragment
    • Echo Form

Page Title & Url[edit]

javascript: void(prompt('link to this page',document.title + '\n' + location.href));

Description 
Throws a prompt with the current page's title and url, selected for quick copying. Hit escape or return/enter to dismiss the prompt. I find this handy for quickly dropping a url into an email, or compiling a list of pages. compatible: tested in win32, mac NN3+, win32 IE4+; Mac ie5
From 
http://sam-i-am.com/work/bookmarklets/misc.html

Create Link[edit]

javascript: void(prompt('link to this page',unescape('%3Ca href=%22') + location.href + unescape('%22%3e') + document.title + unescape('%3c/a%3e')));

Description 
In the same vein as Page Title & Url, this throws a prompt with the current page's title and url - formatted as a link (<a href="url">title</a>), selected for quick copying. Hit escape or return/enter to dismiss the prompt. compatible: tested in win32, mac NN3+, win32 IE4+; Mac ie5
From 
http://sam-i-am.com/work/bookmarklets/misc.html

Samrod.com[edit]

http://samrod.com/

  • Web Search Engines
    • Google
    • Yahoo!
    • First.gov
  • Images
    • Google Images
    • Getty Images
  • Financial
    • Basic Quote
    • Detailed Quote
    • Business.com
    • Currency - convert currencies with Bloomberg.com
  • Shopping
    • Amazon.com
    • Buy.com
    • Shop Yahoo!
    • PriceWatch
    • PriceGrabber
    • PCPhotoReview
  • Software
    • VersionTracker
    • WindowsTracker
  • Shipping
    • UPS
    • FedEx
    • USPS
    • DHL
  • Reference
    • Google Maps
    • Dictionary - dictionary.com
    • Thesaurus - thesaurus.com
    • to French -altavista's babelfish
    • to Spanish -altavista's babelfish
    • to German -altavista's babelfish
    • to Italian -altavista's babelfish
    • ChemFinder - reg req.
  • Entertainment
    • Movies & TV - IMDB
    • Cast & Crew - IMDB
    • Musicians - Gracenote CDDB
    • Albums - Gracenote CDDB
    • Songs - Gracenote CDDB
  • Legal Research
    • U.S. Constitution
    • U.S. Codes
    • RegisterClub - register domains? seems to be broken as of Sat Apr 30 15:53:07 2005
    • TradeMark Search - US registered trademarks
    • Patent Search - US Patent office
    • CalBAR Search - california lawyers
    • Whois
  • Web Development
    • Document Info - like the browser window of the same name
    • Forms - pulls the forms out of the current page and lets you hack on them
    • Images - shows all images in a list including their dimensions
    • Find All - highlight search
    • Images 2a
    • Cookie - displays cookie info
    • Query String
    • Browser Info
    • Links
    • Referrer
    • Last Modified
    • Whois - of current domain
    • Validate - from w3c

Smokinggun.com[edit]

Printer[edit]

javascript:void(d=document);void(el=d.getElementsByTagName('a'));out='';for(i=0;i<el.length;i++){void(t = el[i].href.toLowerCase()); if(t.indexOf('print') > -1 && t.indexOf('edition') < 0) {void(document.location=el[i].href)}};

Description 
Tries to find the the printer version of an article. Tested on: NY Times, Salon, Washington Post, LA Times, The Guardian, The Economist(May not work in all areas of the site.), SF Gate, and The New Yorker.
From 
http://www.smokinggun.com/code/bookmarklets.php

Links Only v1.2[edit]

javascript:void(d=document);void(el=d.getElementsByTagName('a'));out='';for(i=0;i<el.length;i++){void(out=out+'<a href='+el[i].href+'>'+el[i].innerHTML+'</a><br><br>\r\r')};d.outerHTML=el.length+' link on the page<br><br>'+out;

Description 
Shows only the links on a page. Includes a count of all the links.
From 
http://www.smokinggun.com/code/bookmarklets.php

Clean Read[edit]

javascript:void(d=document);void(el=d.getElementsByTagName('p'));out='';for(i=0;i<el.length;i++){void(out=out+'<p>'+el[i].innerHTML+'</p>\r\r')};d.innerHTML=out;

Description 
Removes non article text from news sites like CNN, NYTimes, Washington Post and News.com. The will not work on all pages
From 
http://www.smokinggun.com/code/bookmarklets.php

Clean Read v1.2gh[edit]

javascript:void(d=document);void(el=d.getElementsByTagName('p'));out='';for(i=0;i<el.length;i++){void(out=out+'<p>'+el[i].innerHTML+'</p>\r\r')};d.innerHTML=out;'<table width=400><tr><td>'+out+'</td></tr></table>';

Description 
Removes non article text from news sites like CNN, NYTimes, Washington Post and News.com. The will not work on all pages. Also sets the column width to 400 pixels. Thanks to Ben Winslow rain @ bluecherry o net for sending in a Mozilla compatible version.
From 
http://www.smokinggun.com/code/bookmarklets.php

Zap v1.1[edit]

javascript:void(d=document);void(el=d.getElementsByTagName('iframe'));for(i=0;i<el.length;i++){void(el[i].style.display='none')};void(el=d.getElementsByTagName('img'));for(i=0;i<el.length;i++){void(el[i].style.display='none')};void(el=d.getElementsByTagName('a'));for(i=0;i<el.length;i++){void(el[i].style.textDecoration='none');}

Description 
Removes underlines from links, images, iframes(these usually hold rich media ads).
From 
http://www.smokinggun.com/code/bookmarklets.php

PDF[edit]

javascript:void(d=document);void(el=d.getElementsByTagName('a'));out='';function go(u){d.location=u};a = new Array();for(i=0;i<el.length;i++){void(t = el[i].href.toLowerCase());if(t.indexOf('.pdf') > -1 && t.indexOf('javascript:') < 0) {void(a[a.length]=el[i].href);void(out=out+'<a href='+el[i].href+'>'+el[i].innerHTML+'</a> | <span style=\'color:#999999\'>'+el[i].href+'</span><br><br>\r\r')}};if (a.length == 0) alert('No PDFs Found');if (a.length == 1) go(a[0]);if (a.length > 1) d.innerHTML = out;

Description 
Goes to a PDF file on a page, or will create a list of links to PDF's if more than one is on the page.
From 
http://www.smokinggun.com/code/bookmarklets.php

Subsimple.com[edit]

  • http://subsimple.com/bookmarklets/collection_layout.asp
    • Clear Ads
    • Clear Geocities
    • Clear IntelliTxt
    • Clear Trails
    • Clear Layers
    • Allow Right-click
    • Drop-down to List
    • List to Drop-down
    • Bigger Text Areas
    • Resizable Frames
    • Clear - combines Clear Ads, Clear Geocities, Clear IntelliTxt, Clear Trails, Allow Right-click


User:JesseW[edit]

hrefs and name as link text[edit]

javascript:(function(){var i,c,x,h; for(i=0;x=document.links[i];++i) { h=x.getAttribute(%22href%22)+%22QBREAKQ%22; x.title+=%22 %22 + x.innerHTML; x.appendChild(document.createTextNode(h)); } })()

Description 
Allows copying of name and href more easily. It marks the end of the href with the text "QBREAKQ" for easy spliting.
From 
http://en.wikipedia.org/wiki/User:JesseW (based on one from squarefree)

Philburns.com[edit]

Navigation[edit]

Open all Links in New Windows[edit]

javascript:void(thislinks=document.links);for(linklen=0;linklen<thislinks.length;linklen++){thislinks[linklen]=open(thislinks[linklen].toString(),'','scrollbars,location,toolbar,status,menubar,resizable');void(window.focus())}

Description 
Opens all the links on the page in new windows and sends them to the background
From 
http://www.philburns.com/bookmarklets.html
Open Previous in New Window[edit]

javascript:void(str=window.history.previous);if(str){open(href=str,'','scrollbars,location,toolbar,status,menubar,resizable')}else{alert('There is no Previous Window......... Doh!')};void(null)

Description 
Only works if the Previous is in the same domain
From 
http://www.philburns.com/bookmarklets.html
Open Next in New Window[edit]

javascript:void(str=window.history.next);if(str){open(href=str,'','scrollbars,location,toolbar,status,menubar,resizable')}else{alert('There is no next Window......... Doh!')};void(null)

Description 
Only works if the Next is in the same domain
From 
http://www.philburns.com/bookmarklets.html

Searching[edit]

Search this Domain.[edit]

javascript:void(str=prompt('String to search for at '+document.domain,''));if(str){void(location=('http://www.google.com/search?as_q='+str+'&as_sitesearch='+document.domain));}

Description 
Very cool. Promts for a string, then does a Google advanced search in current domain.
From 
http://www.philburns.com/bookmarklets.html
Search ODP in Background[edit]

javascript:void(str=prompt('Search for:','Foobar'));if(str){void(t3Wc6J2N=open('http://207.200.81.135/cgi-bin/search?search='+escape(str).split('%20').join('+'),'','scrollbars,location,toolbar,status,menubar,resizable'));}(t3Wc6J2N.blur());

Description 
from - Phil Burns.
From 
http://www.philburns.com/bookmarklets.html
Search Hotbot (New Window)[edit]

javascript:void(str=prompt('Search for:','Foobar'));if(str){void(open('http://www.hotbot.lycos.com/?MT='+escape(str).split('%20').join('+'),'','scrollbars,location,toolbar,status,menubar,resizable'));}

Description 
from - Rijk Van Geijtenbeek.
From 
http://www.philburns.com/bookmarklets.html
Links To this Page - AltaVista[edit]

javascript:location.href='http://www.altavista.com/cgi-bin/query?q=link:' + document.location.href;

Description 
from - Rijk van Geijtenbeek.
From 
http://www.philburns.com/bookmarklets.html
Search for current page in www.archive.org[edit]

javascript:location.href='http://web.archive.org/archive_request_ng?collection=web&url='+document.location.href+'&Submit=Take+Me+Back%21';

Description 
from - Tobias Boyd.
From 
http://www.philburns.com/bookmarklets.html
Search google groups (New window)[edit]

javascript:void(str=prompt('Google Groups Search:',''));if(str){void(open('http://groups.google.com/groups?as_q='+str+'&lr=lang_en&num=50&as_scoring=d&hl=en'));}

Description 
from - An opera.general poster I think
From 
http://www.philburns.com/bookmarklets.html

Checking Code Validity[edit]

Validate at WDG[edit]

javascript:location.href='http://www.htmlhelp.com/cgi-bin/validate.cgi?url=' + document.location.href;

Description 
from - Rijk van Geijtenbeek.
From 
http://www.philburns.com/bookmarklets.html
Validate HTML at W3C[edit]

javascript:location.href='http://validator.w3.org/check?uri=' + document.location.href + '&doctype=Inline';

Description 
from - Rijk van Geijtenbeek.
From 
http://www.philburns.com/bookmarklets.html
Validate HTML at W3C (In Background)[edit]

javascript:void(str='http://validator.w3.org/check?uri=' + document.location.href);if(str){abc123=open(href=str,'','scrollbars,resizable');}(abc123.blur());

Description 
from - Me :).
From 
http://www.philburns.com/bookmarklets.html
Validate all frames HTML W3C[edit]

javascript:if(frames.length>0){for (i=0;i<frames.length;i++){fR=frames[i];void(window.open('http://validator.w3.org/check?uri=' + fR.document.location.href +'&doctype=Inline','','scrollbars,resizable'))}}else{alert('No frames!')}

Description 
from - Me.
From 
http://www.philburns.com/bookmarklets.html
Validate CSS for page at W3Cjavascript:[edit]

javascript:location.href='http://jigsaw.w3.org/css-validator/validator?uri=' + document.location.href;

Description 
from - Phil Burns. Finally my own one :)
From 
http://www.philburns.com/bookmarklets.html
Validate CSS for page at W3C (In Background)[edit]

javascript:void(str='http://jigsaw.w3.org/css-validator/validator?uri=' + document.location.href);if(str){abc123=open(href=str,'','scrollbars,resizable');}(abc123.blur());

Description 
from - Phil Burns. Another :)
From 
http://www.philburns.com/bookmarklets.html
Validate all frames CSS W3C[edit]

javascript:if(frames.length>0){for (i=0;i<frames.length;i++){fR=frames[i];void(window.open('http://jigsaw.w3.org/css-validator/validator?uri=' + fR.document.location.href,fR.name+i,'','scrollbars,resizable'))}}else{alert('No frames!')}

Description 
from - Me.
From 
http://www.philburns.com/bookmarklets.html
Validate HTML & CSS at W3C (In Background)[edit]

javascript:void(str='http://jigsaw.w3.org/css-validator/validator?uri=' + document.location.href);if(str){abc123=open(href=str,'','scrollbars,resizable');}abc123.blur();(str='http://validator.w3.org/check?uri=' + document.location.href + '&doctype=Inline');if(str){abc123=open(href=str,'','scrollbars,resizable');}abc123.blur();

Description 
Opens two windows from - Phil Burns. Another :)
From 
http://www.philburns.com/bookmarklets.html

Page Data[edit]

Document Info[edit]

javascript:Wn7zG3=open('','Z6','width=400,height=400,scrollbars,resizable,menubar'); with(Wn7zG3.document){write('<basetarget=_blank>');{write('<h4>URL</h4><ahref="',document.URL,'">',document.URL,'<h4>Hostname</h4>',document.location.hostname);};write('<h4>Frame URLs</h4>');var pw=parent;var i = 0;while (i<pw.length){aXz=pw.frames[i++].location;write('<a HREF="',aXz,'">',aXz,'</a><br>');};{write('<h4>Document last modified</h4>',document.lastModified,'<h4>Referrer</h4>',document.referrer,'<h4>Cookie</h4>',document.cookie,'<h4>Hash</h4>',document.location.hash,'<h4>Links</h4>');};var i =0;while(i<document.links.length){aXz=document.links[i++].href;write('<a HREF="',aXz,'">',aXz,'</a><br>');};{write('<h4>Images</h4>');};var i =0;while(i<document.images.length){aXz=document.images[i++].src; write('<a HREF="',aXz,'">',aXz,'</a><br>');};void(close())}

Description 
Very nice... shows URL, hostname, the URLs of all frames (clickable), modification date, referrer, hash (both if provided only), lists all links and all images (both clickable), all in a new popup window. By - Roland Reck.
From 
http://www.philburns.com/bookmarklets.html
Document Info 2[edit]

javascript:void(thiswin=top);void(siteinfo=window.open('','Z6','width=400,height=300,scrollbars,resizable,menubar'));with(siteinfo.document){open();write('<html><head><base target=_blank><title>Information</title></head><body>');write('<h4>URL</h4><a href="',thiswin.document.URL,'">',thiswin.document.URL,'</a><h4>Hostname</h4>',thiswin.document.location.hostname); write('<h4>Frame URLs</h4>'); var pw=thiswin.parent;var i = 0;while (i <pw.length) {aXz=pw.frames[i++].location; write('<a href="',aXz,'">',aXz,'</a><br />');}; {write('<h4>Last modified</h4>',thiswin.document.lastModified,'<h4>Referrer</h4>',thiswin.document.referrer,'<h4>Cookie</h4>',thiswin.document.cookie,'<h4>Hash</h4>',thiswin.document.location.hash,'<h4>Links</h4>');};var i = 0;while(i<thiswin.document.links.length) {aXz=thiswin.document.links[i++].href;write('<a href="',aXz,'">',aXz,'</a><br />');};{write('<h4>Bilder</h4>');}; var i =0;while(i<thiswin.document.images.length){aXz=thiswin.document.images[i++].src; write('<a href="',aXz,'">',aXz,'</a><br />');};void(close())}

Description 
Similar to the above but re-written by Roland for Opera 7
From 
http://www.philburns.com/bookmarklets.html
Check Document Last Modified[edit]

javascript:if (document.lastModified==0) {alert('Date not available!');} else {alert('This document has been modified on: ' + document.lastModified); }

Description 
from - Maurizio Berti & Rijk van Geijtenbeek.
From 
http://www.philburns.com/bookmarklets.html

Window widgets[edit]

Resize Window to 1024 x 768[edit]

javascript:window.resizeTo(1024,768);window.moveTo(0,0);

Description 
Me.
From 
http://www.philburns.com/bookmarklets.html
Resize Window to 800 x 600[edit]

javascript:window.resizeTo(800,600);window.moveTo(0,0);

Description 
Me.
From 
http://www.philburns.com/bookmarklets.html
Resize Window to 640 x 480[edit]

javascript:window.resizeTo(640,480);window.moveTo(0,0);

Description 
Me.
From 
http://www.philburns.com/bookmarklets.html

Miscellaneous[edit]

Google Translate (English)[edit]

javascript:q=location.href;if(q)location.href='http://translate.google.com/translate_c?hl=en&u='+escape(q)

Description 
from - Partially Correct
From 
http://www.philburns.com/bookmarklets.html
Show All Images in New Window[edit]

javascript:Ai7Mg6P='';for (i7M1bQz=0;i7M1bQz<document.images.length;i7M1bQz++){Ai7Mg6P+='<img src='+document.images[i7M1bQz].src+'><br>'};if(Ai7Mg6P!=''){fg=window.open();with(fg.document){write('<center>'+Ai7Mg6P+'</center>')};void(document.close())}else{alert('No images!')}

Description 
- Modified from bookmarklets.com
From 
http://www.philburns.com/bookmarklets.html
Wordpress Quick Post[edit]

javascript:if(navigator.userAgent.indexOf('Safari') >= 0){Q=getSelection();}else{Q=document.selection?document.selection.createRange().text:document.getSelection();}void(window.open('http://www.blogsite.tld/blog/wp-admin/bookmarklet.php?text='+encodeURIComponent(Q)+'&popupurl='+encodeURIComponent(location.href)+'&popuptitle='+encodeURIComponent(document.title),'WordPress bookmarklet','scrollbars=yes,width=600,height=460,left=100,top=150,status=yes'));

Description 
opens your wordpress blog's post interface in a popup window; edit the www.blogsite.tld to your wordpress blog installation URI; requires installation of this plugin: http://www.keditasmasi.com/plugins/blogthis.zip
From 
http://www.keditasmasi.com/blogthis-for-wordpress/ archive.org version
PAS Complaint[edit]

javascript:eMlA='';for(iB2M=0;iB2M<document.links.length;iB2M++){if(document.links[iB2M].protocol=='mailto:'){Ju59=document.links[iB2M].toString();eMlA+=Ju59.substring(7,Ju59.length)+','}};if(eMlA!=''){javascript:location.href='mailto:'+eMlA+'?SUBJECT=Invalid Code at '+document.title+' - '+location.href+'&BODY=The code on your webpage is not rendering well in my browser. For details please see http://www.htmlhelp.com/cgi-bin/validate.cgi?url='+escape(location.href)}else{alert('No mailto links on page!')}

Description 
- Send a complaint about a webpages code to all mailto links on a page ;-) from - Me
From 
http://www.philburns.com/bookmarklets.html

Grants of redistribution[edit]