User:JesseW/BookmarkletsUniversal

From Wikipedia, the free encyclopedia

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

[edit] Bookmarklet sites

[edit] Many bookmarklets

(above, quotes are from [1])

(above descriptions are from [2]

[edit] One (or so) bookmarklets

[edit] IE only

  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])

[edit] Bookmarklets

[edit] squarefree.com/bookmarklets

[edit] Link Bookmarklets

[edit] search links

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

[edit] linked images

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

[edit] linked pages

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

[edit] hide visited

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

[edit] int/ext links

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

[edit] open all links

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

[edit] open selected links

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

[edit] target this window

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

[edit] target new windows

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

[edit] target new bg windows

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

[edit] target one new window

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

[edit] remove redirects

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

[edit] hrefs as link text

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

[edit] full urls as link text

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

[edit] Form Bookmarklets

[edit] frmget

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

[edit] toggle checkboxes

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

[edit] next option

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

[edit] allow no option

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

[edit] remove maxlength

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

[edit] enlarge textareas

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

[edit] show hiddens

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

[edit] undisable

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

[edit] character count

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

[edit] view passwords

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

[edit] remember password

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

[edit] htmlarea ie

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

[edit] htmlarea moz

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

[edit] Text and Data Bookmarklets

[edit] highlight

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

[edit] highlight regexp

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

[edit] zoom images in

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

[edit] zoom images out

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

[edit] zoom layout

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

[edit] view selection

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

[edit] clone document

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

[edit] sort table

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

[edit] number rows

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

[edit] transpose tables

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

[edit] bullets to numbers

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

[edit] number lines

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

[edit] rot13 selection

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

[edit] Bookmarklets for Zapping Annoyances

[edit] zap plugins

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

[edit] zap colors

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

[edit] zap cheap effects

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

[edit] zap events

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

[edit] zap timers

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

[edit] zap

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

[edit] zap images

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

[edit] linearize

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

[edit] printer friendly

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

[edit] zap presentational html

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

[edit] zap style sheets

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

[edit] zap cookies

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

[edit] zap white backgrounds

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

[edit] restore context menu

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

[edit] restore selecting

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

[edit] remove redirects

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

[edit] lowercase

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

[edit] deleet

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

[edit] force wrap

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

[edit] trigger rollovers

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

[edit] Web Development Bookmarklets

[edit] shell

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

[edit] jsenv

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

[edit] test styles

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] edit styles

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

[edit] ancestors

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

[edit] computed styles

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

[edit] zap style sheets

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

[edit] zap presentational html

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

[edit] view style sheets

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

[edit] view scripts

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

[edit] view variables

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

[edit] list classes

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

[edit] generated source

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

[edit] partial source

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

[edit] show blocks

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

[edit] topographic view

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

[edit] topo with borders

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

[edit] make link

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

[edit] named anchors

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

[edit] onerror status

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

[edit] onerror alert

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

[edit] Validation Bookmarklets

[edit] validate html

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




[edit] quick validate

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




[edit] netcraft

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




[edit] http headers

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




[edit] grayscale

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




[edit] PDAize

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




[edit] linearize

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




[edit] check images

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




[edit] zap images

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




[edit] check alts

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




[edit] list alts

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




[edit] blogidate html4.01 transitional

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




[edit] blogidate html4.01 strict

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




[edit] blogidate xhtml1 transitional

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




[edit] blogidate xhtml1 strict

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




[edit] blogidate xml well-formedness

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

[edit] Miscellaneous Bookmarklets

[edit] up

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

[edit] top

javascript:location.pathname = ""; void 0

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

[edit] increment

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

[edit] decrement

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

[edit] make numbered list

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

[edit] go to referrer

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

[edit] back to first

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

[edit] add sidebar

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

[edit] domain owner

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] edit page

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

[edit] view cookies

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

[edit] transfer cookies

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

[edit] zap cookies

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

[edit] babelfish

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

[edit] google translate

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

[edit] Bookmarklets.com

    • 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

[edit] Gazingus.org

[edit] Scribbling.net

[edit] The ly detector

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

[edit] Analyze Page Links

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

[edit] Ftrain.com

[edit] The Passivator

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

[edit] Kryogenix.org

[edit] Tantek.com

[edit] Authoring

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

[edit] Multivalidator

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

[edit] Multivalidator Window

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

[edit] HTML

[edit] W3C beta validator

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

[edit] W3C HTML validator

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

[edit] WDG HTML validator

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

[edit] W3C HREF validator

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

[edit] CSS

[edit] W3C CSS validator

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

[edit] Toggle CSS style sheets

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

[edit] Screen sizes

[edit] PocketPC, iPaq 240x320

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

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

[edit] TV safe 544x372

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

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

[edit] VGA 640x480

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

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

[edit] SVGA 800x600

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

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

[edit] XGA 1024x768

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

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

[edit] SXGA 1280x1024

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

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

[edit] UXGA 1600x1200

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

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

[edit] Learning

[edit] CSS

[edit] View style rules

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

[edit] View style sheets

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

[edit] HTTP

[edit] View HTTP headers

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

[edit] Scripts etc.

[edit] View scripts

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

[edit] View images

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

[edit] Reading

[edit] Translation

[edit] Babelfish French to English

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

[edit] Babelfish German to English

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

[edit] Babelfish Spanish to English

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

[edit] Babelfish Italian to English

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

[edit] Babelfish Japanese to English

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

[edit] Enhanced User Interface

[edit] Choose style sheet

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

[edit] Pixy.cz

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

[edit] Liorean.web-graphics.com

[edit] Sam-i-am.com

  • 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

[edit] Page Title & Url

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

[edit] Create Link

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

[edit] Samrod.com

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

[edit] Smokinggun.com

[edit] Printer

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

[edit] Links Only v1.2

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

[edit] Clean Read

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

[edit] Clean Read v1.2gh

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

[edit] Zap v1.1

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

[edit] PDF

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

[edit] Subsimple.com

  • 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


[edit] User:JesseW

[edit] hrefs and name as link text

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)

[edit] Philburns.com

[edit] Navigation

[edit] Open all Links in New Windows

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

[edit] Open Previous in New Window

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

[edit] Open Next in New Window

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

[edit] Searching

[edit] Search this Domain.

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

[edit] Search ODP in Background

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

[edit] Search Hotbot (New Window)

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

[edit] Links To this Page - AltaVista

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

[edit] Search for current page in www.archive.org

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

[edit] Search google groups (New window)

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

[edit] Checking Code Validity

[edit] Validate at WDG

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

[edit] Validate HTML at W3C

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

[edit] Validate HTML at W3C (In Background)

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

[edit] Validate all frames HTML W3C

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

[edit] Validate CSS for page at W3Cjavascript:

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

[edit] Validate CSS for page at W3C (In Background)

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

[edit] Validate all frames CSS W3C

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

[edit] Validate HTML & CSS at W3C (In Background)

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

[edit] Page Data

[edit] Document Info

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

[edit] Document Info 2

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

[edit] Check Document Last Modified

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

[edit] Window widgets

[edit] Resize Window to 1024 x 768

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

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

[edit] Resize Window to 800 x 600

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

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

[edit] Resize Window to 640 x 480

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

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

[edit] Miscellaneous

[edit] Google Translate (English)

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

[edit] Show All Images in New Window

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

[edit] Wordpress Quick Post

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

[edit] PAS Complaint

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

[edit] Grants of redistribution