-
-
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.