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.2 KiB
68 lines
2.2 KiB
2 months ago
|
'use strict';
|
||
|
|
||
|
import utils from './../utils.js';
|
||
|
import platform from '../platform/index.js';
|
||
|
|
||
|
export default platform.hasStandardBrowserEnv ?
|
||
|
|
||
|
// 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() {
|
||
|
const msie = platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent);
|
||
|
const urlParsingNode = document.createElement('a');
|
||
|
let originURL;
|
||
|
|
||
|
/**
|
||
|
* Parse a URL to discover its components
|
||
|
*
|
||
|
* @param {String} url The URL to be parsed
|
||
|
* @returns {Object}
|
||
|
*/
|
||
|
function resolveURL(url) {
|
||
|
let 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) {
|
||
|
const 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;
|
||
|
};
|
||
|
})();
|