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;
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								    })()
							 | 
						||
| 
								 | 
							
								);
							 |