You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.3 KiB
68 lines
2.3 KiB
'use strict'; |
|
|
|
var utils = require('./../utils'); |
|
|
|
module.exports = ( |
|
utils.isStandardBrowserEnv() ? |
|
|
|
// Standard browser envs have full support of the APIs needed to test |
|
// whether the request URL is of the same origin as current location. |
|
(function standardBrowserEnv() { |
|
var msie = /(msie|trident)/i.test(navigator.userAgent); |
|
var urlParsingNode = document.createElement('a'); |
|
var originURL; |
|
|
|
/** |
|
* Parse a URL to discover it's components |
|
* |
|
* @param {String} url The URL to be parsed |
|
* @returns {Object} |
|
*/ |
|
function resolveURL(url) { |
|
var href = url; |
|
|
|
if (msie) { |
|
// IE needs attribute set twice to normalize properties |
|
urlParsingNode.setAttribute('href', href); |
|
href = urlParsingNode.href; |
|
} |
|
|
|
urlParsingNode.setAttribute('href', href); |
|
|
|
// urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils |
|
return { |
|
href: urlParsingNode.href, |
|
protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', |
|
host: urlParsingNode.host, |
|
search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', |
|
hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', |
|
hostname: urlParsingNode.hostname, |
|
port: urlParsingNode.port, |
|
pathname: (urlParsingNode.pathname.charAt(0) === '/') ? |
|
urlParsingNode.pathname : |
|
'/' + urlParsingNode.pathname |
|
}; |
|
} |
|
|
|
originURL = resolveURL(window.location.href); |
|
|
|
/** |
|
* Determine if a URL shares the same origin as the current location |
|
* |
|
* @param {String} requestURL The URL to test |
|
* @returns {boolean} True if URL shares the same origin, otherwise false |
|
*/ |
|
return function isURLSameOrigin(requestURL) { |
|
var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; |
|
return (parsed.protocol === originURL.protocol && |
|
parsed.host === originURL.host); |
|
}; |
|
})() : |
|
|
|
// Non standard browser envs (web workers, react-native) lack needed support. |
|
(function nonStandardBrowserEnv() { |
|
return function isURLSameOrigin() { |
|
return true; |
|
}; |
|
})() |
|
);
|
|
|