-
-
Save jed/1182343 to your computer and use it in GitHub Desktop.
function(){ | |
// will annotate once complete | |
} |
function(a,b,c){b=document.createElement("a");b.href=a;return(a=location)[c="protocol"]==b[c]&&a[c="hostname"]==b[c]&&+a.port||80==+b.port||80} |
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE | |
Version 2, December 2004 | |
Copyright (C) 2011 YOUR_NAME_HERE <YOUR_URL_HERE> | |
Everyone is permitted to copy and distribute verbatim or modified | |
copies of this license document, and changing it is allowed as long | |
as the name is changed. | |
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE | |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | |
0. You just DO WHAT THE FUCK YOU WANT TO. |
{ | |
"name": "isSameOrigin", | |
"description": "Determines whether a URL has the same origin as the current browser page.", | |
"keywords": [ | |
"url", | |
"uri", | |
"origin", | |
"same-origin", | |
"browser" | |
] | |
} |
<!DOCTYPE html> | |
<title>Same-origin tester</title> | |
<div>Expected value: <b>true</b></div> | |
<div>Actual value: <b id="ret"></b></div> | |
<script> | |
var myFunction = function(a,b,c){b=document.createElement("a");b.href=a;return(a=location)[c="protocol"]==b[c]&&a[c="hostname"]==b[c]&&+a.port||80==+b.port||80} | |
document.getElementById( "ret" ).innerHTML = myFunction("//gist.github.com:80") | |
</script> |
Oh, fantastic.
so, that would be 113 bytes:
function(a,b){(b=document.createElement("a")).href=a;return!location.href.indexOf(b.href.split(a="/",3).join(a))}
or in 103:
function(a){with(document.createElement("a"))return href=a,!href.indexOf(/^.*?\w\//.exec(location)[0])}
kudos for that discovery, @tiff.
@jed & @tiff,
IE8+ seems OK (tested only in IE8)
IE7 (using IE8 in IE7 mode) doesn't seems to normalize anything (as expected?!):
neither blank protocol -> //twitter.com
not normalized to http(s)://twitter.com/
neither port -> https://twitter.com:443
not normalized to https://twitter.com/
neither final slash -> https://twitter.com
not normalized to https://twitter.com/
Whoaaaaa, it seems that setting the host in IE trigger some href normalization!
So, adding host=host
, as dumb as it seems, solve the problem in IE.
function(a){with(document.createElement("a"))return href=a,host=host,!href.indexOf(/^.*?\w\//.exec(location)[0])}
does the trick in 114 bytes.
Someone could test it on real IE7 & IE6?
After testin with browserstack.com & browserling.com, it appears the trick does'nt work on
IE6 & Safari 4 port isn't normalized... to be continued
good work, @adriengibrat. let us know if you find something.
function λ(l){with(λ.a||(λ.a=document.createElement("a")))return href=l,host=host,!href.indexOf(/^.*?\w\//.exec(location)[0])}
127 bytes, use a cached dom link node.
Still does'nt work on IE6 (4.5%) & Safari 4 (lt 0.5%), but both browsers have no/buggy CORS implementation, so who cares?
@sstephenson you shouldn't be checking hostname. An origin is the protocol + host (which comprises the hostname and non-standard port), not protocol + hostname.