Power User Guide for the iPhone, Droid or Other Smart Phone ... and the Computer

George Washington's picture

Washington’s Blog

As I noted in 2009:

Since I just bought an iPhone, I am learning - and will be posting - some tricks and shortcuts for making it more useful.

 

The
iPhone G3 is a great smart phone and mobile computing device.
However, it has some real blind spots. For example, you cannot do a
basic search within a web page for words or phrases.

 

Here is the hack/workaround:

1) Open up your Safari web browser

 

2) Bookmark a page (by tapping the button)

 

3) Go into bookmarks (by tapping the button)

 

4) Click "Edit"

 

5) Select your new bookmark

 

6) Change the name to "Search" or "Find"

 

7) Delete the address

 

8) Copy and paste the following into the address box [just
double-click anywhere within the javascript code, copy and then paste]:

javascript:void%28s%3Dprompt%28%27Find%20text%3A%27%2C%27%27%29%29%3Bs%3D%27%28%27+s+%27%29%27%3Bx%3Dnew%20RegExp%28s%2C%27gi%27%29%3Brn%3DMath.floor%28Math.random%28%29*100%29%3Brid%3D%27z%27%20+%20rn%3Bb%20%3D%20document.body.innerHTML%3Bb%3Db.replace%28x%2C%27%3Cspan%20name%3D%27%20+%20rid%20+%20%27%20id%3D%27%20+%20rid%20+%20%27%20style%3D%5C%27color%3A%23000%3Bbackground-color%3Ayellow%3B%20font-weight%3Abold%3B%5C%27%3E%241%3C/span%3E%27%29%3Bvoid%28document.body.innerHTML%3Db%29%3Balert%28%27Found%20%27%20+%20document.getElementsByName%28rid%29.length%20+%20%27%20matches.%27%29%3Bwindow.scrollTo%280%2Cdocument.getElementsByName%28rid%29%5B0%5D.offsetTop%29%3B

9) Save (by tapping Done)

Now surf as normal, and when you want to find something within a web page, choose bookmarks and select "Search" or "Find".

 

The following javascript dialog will pop up:

 

 

It works well.

I've set up a number of other power-user bookmarks on my iPhone since
then. To install them, follow the 9 steps above, but substitute the
following javascript code for the code in step 8 above.

Google Search

Highlight text, then use this bookmark to automatically run a Google search for that text:

javascript:q%20=%20""%20+%20(window.getSelection%20?%20window.getSelection()%20:%20document.getSelection%20?%20document.getSelection()%20:%20document.selection.createRange().text);%20if%20(!q)%20q%20=%20prompt("You%20didn't%20select%20any%20text.%20%20Enter%20a%20search%20phrase:",%20"");%20if%20(q!=null)%20location="http://www.google.com/search?q="%20+%20escape(q).replace(/%20/g,%20"+");%20void%200

Compare Google

After you've run a search in any search engine other than Google, use this bookmark to compare Google's search results:

javascript:Q=[];%20c=location.search.slice(1).split('&');%20for%20(i%20in%20c)%20{%20f=c[i].split('=');%20if%20(f[0]=='q'%20||%20f[0]=='as_q'%20||%20f[0]=='p'%20||%20f[0]=='query')%20if%20(f[1])%20Q.push(f[1])%20}%20R=unescape(Q.join(';%20').replace(/\+/g,'%20'));%20location%20=%20'http://www.google.com/search?q='%20+%20escape(R);

Compare Bing

After you've run a search in any search engine other than Bing, use this bookmark to compare Bings's search results:

javascript:Q=[];%20c=location.search.slice(1).split('&');%20for%20(i%20in%20c)%20{%20f=c[i].split('=');%20if%20(f[0]=='q'%20||%20f[0]=='as_q'%20||%20f[0]=='p'%20||%20f[0]=='query')%20if%20(f[1])%20Q.push(f[1])%20}%20R=unescape(Q.join(';%20').replace(/\+/g,'%20'));%20location%20=%20'http://search.msn.com/results.aspx?q='%20+%20escape(R);

Wiki Search

Highlight text, then use this bookmark to automatically search for that phrase in Wikipedia:

javascript:function
se(d) {return d.selection ? d.selection.createRange().text :
d.getSelection()} s = se(document); for (i=0;
i<frames.length

&&
!s; i++) s = se(frames[i].document); if (!s || s=='') s =
prompt('Enter%20search%20terms%20for%20Wikipedia','');
open('http://en.wikipedia.org' + (s ?
'/w/index.php?title=Special:Search&search='
+ encodeURIComponent(s) : '')).focus();

Search for Term Within Favorite Site

Highlight
text, then use this bookmark to automatically search for that phrase
at your favorite site (in the following example, I used my own site;
substitute whatever site you want for
the 2 bolded uses of WashingtonsBlog.com below):

javascript:q=""+(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);if(!q)q=prompt("Search%20WashingtonsBlog.com%20[leave%20selection%20and%20box%20blank%20to%20list%20all%20pages]%20...").replace(/\s\+/g,"%252B");if(q!=null)window.open('http://www.google.com/search?q=%27+%27site:WashingtonsBlog.com+%27+q.rep...(/\s+/g,%27+%27));void(0);

When Modified

It is often difficult to tell whether a web page has new or very old and stale information on it.

Use this bookmark to tell you when the web page was last modified:

javascript:alert('Modification%20Date:%20'+document.lastModified);

Previous Versions

Anyone
who has used the Internet Archive's Wayback Machine knows that it is a
very powerful way to look at old versions of the website.

Here's the bookmark for looking at old versions of any web page:

javascript:location.href='http://web.archive.org/web/*/'+document.location.href;

Whose Website

It is often difficult to tell who is behind a website.

Use this bookmark to see who bought the website's domain name:

javascript:void(w=window.open('http://mxtoolbox.com/SuperTool.aspx?action=whois%3A'+location.hostname,%20'MXToolbox',%20'scrollbars,resizable,width=500,height=600'));

Scroll to Bottom of Page

You can easily scroll to the top of a webpage - at least on the iPhone - by tapping the built-in status bar at the top of the screen.

But to scroll to the bottom of the page, create a bookmark using the following code:

javascript:scroll(0,document.getElementsByTagName('body')%5B0%5D.scrollHeight);

Mark Position in Web Page

If you find something you want to re-read, use this bookmark to set the position within the web page:

javascript:void(InPageBookmark=pageYOffset)

Then use this bookmark to go back to that same place in the web page (make this a separate bookmark):

javascript:if%20(typeof%20InPageBookmark=='undefined')%7Balert('No%20in-page%20bookmark.%20Use%20Set%20In-Page%20Bookmark%20tool.%20(bookmarklets.com)')%7Delse%7BscrollBy(0,InPageBookmark-pageYOffset)%7D

Up a Level

If
you're in a web page, but you want to go to one of the websites' main
pages, use this bookmark until you get where you want to go:

javascript:void(location.href=location.href.substring(0,location.href.substring(0,location.href.length-1).lastIndexOf('/')+1))

How Many Windowfulls?

When
you go to a web page, it is impossible at first to know whether it is a
short or endlessly long web page. If you start reading something which
ends up being hundreds of pages long, it is helpful to know that before
you start reading (for example, you might want to save a long essay and
read it another time, or print it out and read it at your leisure).

This bookmark tells you how many "full windows" the web page has:

javascript:alert('The%20document%20fills%20about%20'+Math.round((document.height*document.width)/(innerHeight*innerWidth))+'%20windows%20(at%20current%20window%20size)')

Show Emails

Emails can be hidden in huge web pages, which makes it hard to find out who to contact. This bookmark finds them for you:

javascript:Ai7Mg6P='';for%20(i7M1bQz=0;i7M1bQz%3Cdocument.images.length;i7M1bQz++){Ai7Mg6P+='%3Cimg%20src='+document.images[i7M1bQz].src+'%3E%3Cbr%3E'};if(Ai7Mg6P!=''){document.write('%3Ccenter%3E'+Ai7Mg6P+'%3C/center%3E');void(document.close())}else{alert('No%20images!')}

List All Links

This bookmark lists all links on a webpage:

javascript:WN7z=open('','Z6','width=400,height=200,scrollbars,resizable,menubar');DL5e=document.links;with(WN7z.document){write('<base%20target=_blank>');for(lKi=0;lKi<DL5e.length;lKi++){write(DL5e[lKi].toString().link(DL5e[lKi])+'<br><br>')};void(close())}

Change Links to Show True URL

This bookmark changes all links on a webpage to show where you'll actually end up if you click:

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

Display All Images

If you want show all of the images on a web page, use this bookmark:

javascript:Ai7Mg6P='';for%20(i7M1bQz=0;i7M1bQz%3Cdocument.images.length;i7M1bQz++){Ai7Mg6P+='%3Cimg%20src='+document.images[i7M1bQz].src+'%3E%3Cbr%3E'};if(Ai7Mg6P!=''){document.write('%3Ccenter%3E'+Ai7Mg6P+'%3C/center%3E');void(document.close())}else{alert('No%20images!')}

Double Image Size

Doubles the size of all images on the web page:

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

Halve Image Size

Halves the size of all images on the web page:

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

Double Size of Fixed Elements

If you're going crazy trying to make something bigger because you can't see it, try this:

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

Cookie-Killer

Removes cookies set by the site, including cookies with paths and domains.

javascript:(function(){C=document.cookie.split(";%20");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%20in%20C)if(c=C[i]){document.cookie=c+";%20domain="+d.slice(sl)+";%20path="+p.slice(1)+"/"+";%20expires="+new%20Date((new%20Date).getTime()-1e11).toGMTString()}})()

Remove Redirect

This removes link redrirects, so you go directly to the ultimate target webpage, instead of through some other site:
javascript:(function(){var%20k,x,t,i,j,p;%20for(k=0;x=document.links[k];k++){t=x.href.replace(/[%]3A/ig,':').replace(/[%]2f/ig,'/');i=t.lastIndexOf('http');if(i>0){%20t=t.substring(i);%20j=t.indexOf('&');%20if(j>0)t=t.substring(0,j);%20p=/https?\:\/\/[^\s]*[^.,;'">\s\)\]]/.exec(unescape(t));%20if(p)%20x.href=p[0];%20}%20else%20if%20(x.onmouseover&&x.onmouseout){x.onmouseover();%20if%20(window.status%20&&%20window.status.indexOf('://')!=-1)x.href=window.status;%20x.onmouseout();%20}%20x.onmouseover=null;%20x.onmouseout=null;%20}})();Stop Annoyances

This
powerful bookmark zaps java, flash, background music, third-party
iframes, colors, cheap effects, blind links, exit pop up ads, event
handlers, and timers all at the same time:

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

Remove Images

If
you want a web page to be less cluttered or appropriate for work or
other public places, you can remove all images using this bookmark:

javascript:(function()%7Bfunction%20toArray%20(c)%7Bvar%20a,%20k;a=new%20Array;for%20(k=0;%20k%20%3C%20c.length;%20++k)a%5Bk%5D=c%5Bk%5D;return%20a;%7Dvar%20images,%20img,%20altText;images=toArray(document.images);for%20(var%20i=0;%20i%20%3C%20images.length;%20++i)%7Bimg=images%5Bi%5D;altText=document.createTextNode(img.alt);img.parentNode.replaceChild(altText,%20img)%7D%7D)();

No Color

If a webpage's obnoxious colors makes it hard to read, strip out the colors using this bookmark:

javascript:(function()%7Bvar%20newSS,%20styles='*%20%7B%20background:%20white%20!%20important;%20color:%20black%20!important%20%7D%20:link,%20:link%20*%20%7B%20color:%20%230000EE%20!important%20%7D%20:visited,%20:visited%20*%20%7B%20color:%20%23551A8B%20!important%20%7D';%20if(document.createStyleSheet)%20%7B%20document.createStyleSheet(%22javascript:'%22+styles+%22'%22);%20%7D%20else%20%7B%20newSS=document.createElement('link');%20newSS.rel='stylesheet';%20newSS.href='data:text/css,'+escape(styles);%20document.getElementsByTagName(%22head%22)%5B0%5D.appendChild(newSS);%20%7D%20%7D)();

Translate Into English

This bookmark detects what language the web page is in, then uses Google translate to translate it into English:

javascript:void(0);void(0);void(0);void(0);void('Add%20this%20text%20into%20the%20code%20to%20suppress%20the%20tooltip%20with%20long%20script');void(0);void(0);void(0);void(0);void(0);void(0);void(0);q=location.href;void(location.href='http://translate.google.com/translate?u='+q);

Count Characters in Text Boxes

Many web pages only allow you a certain number of characters in a text box. With this, you can keep count:

javascript:(function(){var%20D=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%20S(e){if(!e.N){var%20x=D.createElement("span"),s=x.style;s.color="green";s.background="white";s.font="bold%2010pt%20sans-serif";s.verticalAlign="top";e.parentNode.insertBefore(x,e.nextSibling);function%20u(){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;}}})()

Remove Maximum Number of Characters in Text Boxes

If you want to remove the maximum number of characters you can type in a text box, use this:

javascript:(function(){var%20x,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");}})()

Show Passwords

If
you want to reveal passwords masked by asteriks or dots (for example,
you've typed in a long password, but your phone rings and you forget if
you finished it or typed it correctly), use this:

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

Tiny Url

Make a smaller version of the url for the web page:

javascript:void(location.href='http://tinyurl.com/create.php?url='+location.href)

These
types of javascript bookmarks work on your Droid or other smart phones
as well. They also work on your computer or laptop. Just create
bookmarks in whatever device you're using, and then run 'em. Or you can
copy and paste any of the javascript bookmarks into your browser's
address bar.

Bookmark this webpage so you can come back to it and mine for bookmarks as the need/desire arises.

For more bookmarklets (or to find code if one of the bookmarks above isn't working), see this and this.