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