#Stay Standalone
A short script to prevent internal links to a "webapp" added to iPhone home screen to open in Safari instead of navigating internally.
#Stay Standalone
A short script to prevent internal links to a "webapp" added to iPhone home screen to open in Safari instead of navigating internally.
(function(a,b,c){if(c in b&&b[c]){var d,e=a.location,f=/^(a|html)$/i;a.addEventListener("click",function(a){d=a.target;while(!f.test(d.nodeName))d=d.parentNode;"href"in d&&(chref=d.href).replace(e.href,"").indexOf("#")&&(!/^[a-z\+\.\-]+:/i.test(chref)||chref.indexOf(e.protocol+"//"+e.host)===0)&&(a.preventDefault(),e.href=d.href)},!1)}})(document,window.navigator,"standalone"); |
<!DOCTYPE html> | |
<html> | |
<head> | |
<title>stay standalone</title> | |
<meta name="apple-mobile-web-app-capable" content="yes"> | |
<meta name="viewport" content="width=device-width,initial-scale=1.5,user-scalable=no"> | |
<script type="text/javascript"> | |
(function(document,navigator,standalone) { | |
// prevents links from apps from oppening in mobile safari | |
// this javascript must be the first script in your <head> | |
if ((standalone in navigator) && navigator[standalone]) { | |
var curnode, location=document.location, stop=/^(a|html)$/i; | |
document.addEventListener('click', function(e) { | |
curnode=e.target; | |
while (!(stop).test(curnode.nodeName)) { | |
curnode=curnode.parentNode; | |
} | |
// Condidions to do this only on links to your own app | |
// if you want all links, use if('href' in curnode) instead. | |
if( | |
'href' in curnode && // is a link | |
(chref=curnode.href).replace(location.href,'').indexOf('#') && // is not an anchor | |
( !(/^[a-z\+\.\-]+:/i).test(chref) || // either does not have a proper scheme (relative links) | |
chref.indexOf(location.protocol+'//'+location.host)===0 ) // or is in the same protocol and domain | |
) { | |
e.preventDefault(); | |
location.href = curnode.href; | |
} | |
},false); | |
} | |
})(document,window.navigator,'standalone'); | |
</script> | |
</head> | |
<body> | |
<p><a href="http://google.com/">google</a></p> | |
<script type="text/javascript" charset="utf-8"> | |
// NEVER user document.write, unless for test porposes. | |
document.write('<p><a href="http://'+document.location.host+'/test/">Same domain</a></p>') | |
</script> | |
<p><a href="/test/"><span>absolute path</span></a></p> | |
<p><a href="javascript:alert('alerts should work')">alert</a></p> | |
<p><a href="test_page.html">relative path</a></p> | |
<p><a href="/test?http://othersite.com">http not on beginning</a></p> | |
<p><a href="#test">anchor</a></p> | |
<p><a href="tel:+1234512345">This link fires a call</a></p> | |
<p><a href="mailto:[email protected]">Mailto</a></p> | |
</body> | |
</html> |
<!DOCTYPE html> | |
<html> | |
<head> | |
<title>stay standalone</title> | |
<meta name="apple-mobile-web-app-capable" content="yes"> | |
<meta name="viewport" content="width=device-width,initial-scale=1.5,user-scalable=no"> | |
<script src="compressed.js" type="text/javascript" charset="utf-8"></script> | |
</head> | |
<body> | |
<p><a href="javascript:location.href=document.referrer">javascript:location.href=document.referrer</a></p> | |
<p><a href="javascript:history.go(-1)">THIS DON'T WORK: javascript:history.go(-1)</a></p> | |
</body> | |
</html> |
MIT License | |
=========== | |
Copyright (c) 2009–2011 | |
Permission is hereby granted, free of charge, to any person obtaining a copy | |
of this software and associated documentation files (the "Software"), to deal | |
in the Software without restriction, including without limitation the rights | |
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
copies of the Software, and to permit persons to whom the Software is | |
furnished to do so, subject to the following conditions: | |
The above copyright notice and this permission notice shall be included in | |
all copies or substantial portions of the Software. | |
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
THE SOFTWARE. | |
BSD License | |
=========== | |
Copyright (c) 2011 | |
All rights reserved. | |
Redistribution and use in source and binary forms, with or without | |
modification, are permitted provided that the following conditions are met: | |
* Redistributions of source code must retain the above copyright | |
notice, this list of conditions and the following disclaimer. | |
* Redistributions in binary form must reproduce the above copyright | |
notice, this list of conditions and the following disclaimer in the | |
documentation and/or other materials provided with the distribution. | |
* Neither the name of the Organization nor the | |
names of its contributors may be used to endorse or promote products | |
derived from this software without specific prior written permission. | |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | |
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY | |
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |