현재 실행중인 자바 스크립트 코드의 파일 경로를 얻는 방법
나는 C #include "filename.c"
또는 PHP 와 같은 것을 시도하고 include(dirname(__FILE__)."filename.php")
있지만 자바 스크립트에서. js 파일이로드 된 URL (예 : 태그의 src 속성에 제공된 URL)을 얻을 수 있으면이 작업을 수행 할 수 있습니다. 자바 스크립트가 그것을 알 수있는 방법이 있습니까?
또는 동일한 도메인에서 동적으로 자바 스크립트를로드하는 좋은 방법이 있습니까 (특별히 도메인을 알지 못함)? 예를 들어 두 개의 동일한 서버 (QA 및 프로덕션)가 있지만 URL 도메인이 분명히 다르다고 가정 해 보겠습니다. include("myLib.js");
파일을로드하는 파일의 도메인에서 myLib.js가로드되는 위치 와 같은 작업을 수행하는 방법 이 있습니까?
좀 헷갈 리게했다면 죄송합니다.
스크립트 내에서 :
var scripts = document.getElementsByTagName("script"),
src = scripts[scripts.length-1].src;
이는 브라우저가 스크립트를 순서대로로드하고 실행하기 때문에 작동하므로 스크립트가 실행되는 동안 포함 된 문서는 스크립트 요소를 페이지의 마지막 요소로 포함해야합니다. 물론이 코드는 스크립트에 대해 '전역 적'이어야하므로 src
나중에 사용할 수있는 곳에 저장 하십시오. 전역 변수를 다음으로 래핑하여 누출을 방지합니다.
(function() { ... })();
Internet Explorer (모든 버전)를 제외한 모든 브라우저 document.currentScript
에는 파일이 포함 된 방식 (비동기, 북마크릿 등)에 관계없이 항상 작동하는이 있습니다.
현재있는 JS 파일의 전체 URL을 알고 싶다면 :
var script = document.currentScript;
var fullUrl = script.src;
Tadaa.
문서에 인라인 스크립트가 있으면 여기에서 허용되는 답변이 작동하지 않습니다. 이를 방지하기 위해 다음을 사용하여 속성 <script>
이있는 태그 만 대상으로 지정할 수 있습니다 [src]
.
/**
* Current Script Path
*
* Get the dir path to the currently executing script file
* which is always the last one in the scripts array with
* an [src] attr
*/
var currentScriptPath = function () {
var scripts = document.querySelectorAll( 'script[src]' );
var currentScript = scripts[ scripts.length - 1 ].src;
var currentScriptChunks = currentScript.split( '/' );
var currentScriptFile = currentScriptChunks[ currentScriptChunks.length - 1 ];
return currentScript.replace( currentScriptFile, '' );
}
이것은 마지막 외부 .js 파일을 효과적으로 캡처하여 인라인 JS 템플릿에서 발생한 몇 가지 문제를 해결합니다.
방금이 작은 트릭을 만들었습니다.
window.getRunningScript = () => {
return () => {
let err = new Error()
let link = err.stack.split('(')
link = link[1]
link = link.split(')')[0]
link = link.split(':')
link.splice(-2, 2)
link = link.join(':')
return link
}
}
console.log('%c Currently running script:', 'color: blue', getRunningScript()())
작업 : Chrome, Firefox, Edge
즐겨 !
여기에서 찾은 답변을 구체화하여 다음을 생각해 냈습니다.
getCurrentScript.js
var getCurrentScript = function () {
if (document.currentScript) {
return document.currentScript.src;
} else {
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length-1].src;
}
};
module.exports = getCurrentScript;
getCurrentScriptPath.js
var getCurrentScript = require('./getCurrentScript');
var getCurrentScriptPath = function () {
var script = getCurrentScript();
var path = script.substring(0, script.lastIndexOf('/'));
return path;
};
module.exports = getCurrentScriptPath;
BTW : 저는 CommonJS 모듈 형식을 사용 하고 webpack 과 번들링 합니다.
필자는 최근에 스크립트가로드 될 때 동 기적으로 수행하도록 강제하는 대신 언제든지 실행할 수있는 훨씬 더 깔끔한 접근 방식을 발견했습니다.
stackinfo 를 사용 하여 현재 위치에서 스택 추적 을 얻고 info.file
스택 상단 에서 이름을 가져옵니다 .
info = stackinfo()
console.log('This is the url of the script '+info[0].file)
try / catch 메서드를 사용하여 현재 자바 스크립트 파일의 절대 위치를 가져올 수있는 간단한 함수를 코딩했습니다.
You can see it here.
I may be misunderstanding your question but it seems you should just be able to use a relative path as long as the production and development servers use the same path structure.
<script language="javascript" src="js/myLib.js" />
Regardless of whether its a script, a html file (for a frame, for example), css file, image, whatever, if you dont specify a server/domain the path of the html doc will be the default, so you could do, for example,
<script type=text/javascript src='/dir/jsfile.js'></script>
or
<script type=text/javascript src='../../scripts/jsfile.js'></script>
If you don't provide the server/domain, the path will be relative to either the path of the page or script of the main document's path
'program story' 카테고리의 다른 글
사용할 것, int 또는 Integer (0) | 2020.12.14 |
---|---|
중첩 클래스 멤버에 대한 액세스를 포함 클래스로 제한하는 방법은 무엇입니까? (0) | 2020.12.14 |
C ++에서 변수, 메서드 등에 대한 좋은 명명 규칙은 무엇입니까? (0) | 2020.12.14 |
Rails 3 respond_to : 기본 형식? (0) | 2020.12.14 |
크롬 확장 프로그램의 현재 탭 URL을 어떻게 얻을 수 있습니까? (0) | 2020.12.14 |