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.
		
		
		
		
		
			
		
			
				
					
					
						
							79 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
	
	
							79 lines
						
					
					
						
							2.8 KiB
						
					
					
				// addapted from the document.currentScript polyfill by Adam Miller | 
						|
// MIT license | 
						|
// source: https://github.com/amiller-gh/currentScript-polyfill | 
						|
 | 
						|
// added support for Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1620505 | 
						|
 | 
						|
(function (root, factory) { | 
						|
  if (typeof define === 'function' && define.amd) { | 
						|
    define([], factory); | 
						|
  } else if (typeof module === 'object' && module.exports) { | 
						|
    module.exports = factory(); | 
						|
  } else { | 
						|
    root.getCurrentScript = factory(); | 
						|
  } | 
						|
}(typeof self !== 'undefined' ? self : this, function () { | 
						|
  function getCurrentScript () { | 
						|
    var descriptor = Object.getOwnPropertyDescriptor(document, 'currentScript') | 
						|
    // for chrome | 
						|
    if (!descriptor && 'currentScript' in document && document.currentScript) { | 
						|
      return document.currentScript | 
						|
    } | 
						|
 | 
						|
    // for other browsers with native support for currentScript | 
						|
    if (descriptor && descriptor.get !== getCurrentScript && document.currentScript) { | 
						|
      return document.currentScript | 
						|
    } | 
						|
   | 
						|
    // IE 8-10 support script readyState | 
						|
    // IE 11+ & Firefox support stack trace | 
						|
    try { | 
						|
      throw new Error(); | 
						|
    } | 
						|
    catch (err) { | 
						|
      // Find the second match for the "at" string to get file src url from stack. | 
						|
      var ieStackRegExp = /.*at [^(]*\((.*):(.+):(.+)\)$/ig, | 
						|
        ffStackRegExp = /@([^@]*):(\d+):(\d+)\s*$/ig, | 
						|
        stackDetails = ieStackRegExp.exec(err.stack) || ffStackRegExp.exec(err.stack), | 
						|
        scriptLocation = (stackDetails && stackDetails[1]) || false, | 
						|
        line = (stackDetails && stackDetails[2]) || false, | 
						|
        currentLocation = document.location.href.replace(document.location.hash, ''), | 
						|
        pageSource, | 
						|
        inlineScriptSourceRegExp, | 
						|
        inlineScriptSource, | 
						|
        scripts = document.getElementsByTagName('script'); // Live NodeList collection | 
						|
   | 
						|
      if (scriptLocation === currentLocation) { | 
						|
        pageSource = document.documentElement.outerHTML; | 
						|
        inlineScriptSourceRegExp = new RegExp('(?:[^\\n]+?\\n){0,' + (line - 2) + '}[^<]*<script>([\\d\\D]*?)<\\/script>[\\d\\D]*', 'i'); | 
						|
        inlineScriptSource = pageSource.replace(inlineScriptSourceRegExp, '$1').trim(); | 
						|
      } | 
						|
   | 
						|
      for (var i = 0; i < scripts.length; i++) { | 
						|
        // If ready state is interactive, return the script tag | 
						|
        if (scripts[i].readyState === 'interactive') { | 
						|
          return scripts[i]; | 
						|
        } | 
						|
   | 
						|
        // If src matches, return the script tag | 
						|
        if (scripts[i].src === scriptLocation) { | 
						|
          return scripts[i]; | 
						|
        } | 
						|
   | 
						|
        // If inline source matches, return the script tag | 
						|
        if ( | 
						|
          scriptLocation === currentLocation && | 
						|
          scripts[i].innerHTML && | 
						|
          scripts[i].innerHTML.trim() === inlineScriptSource | 
						|
        ) { | 
						|
          return scripts[i]; | 
						|
        } | 
						|
      } | 
						|
   | 
						|
      // If no match, return null | 
						|
      return null; | 
						|
    } | 
						|
  }; | 
						|
 | 
						|
  return getCurrentScript | 
						|
}));
 | 
						|
 |