Skip to content

Instantly share code, notes, and snippets.

@jed
Forked from 140bytes/LICENSE.txt
Created August 30, 2011 23:01
Show Gist options
  • Save jed/1182343 to your computer and use it in GitHub Desktop.
Save jed/1182343 to your computer and use it in GitHub Desktop.
isSameOrigin
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>
@adriengibrat
Copy link

@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/

@adriengibrat
Copy link

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?

@adriengibrat
Copy link

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

@jed
Copy link
Author

jed commented Jun 14, 2012

good work, @adriengibrat. let us know if you find something.

@adriengibrat
Copy link

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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment