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.
		
		
		
		
		
			
		
			
				
					69 lines
				
				2.3 KiB
			
		
		
			
		
	
	
					69 lines
				
				2.3 KiB
			| 
											3 years ago
										 | '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; | ||
|  |       }; | ||
|  |     })() | ||
|  | ); |