모듈 로더를 작성할 때 현재 스크립트 파일의 절대 경로를 기본 경로로 얻는 것이 필수 단계입니다. 이 문제에 대해 함께 논의해 봅시다!
1. 주요 브라우저 구현 방법
[a]. 크롬 및 FF
초간단 문장이면 충분해요!
var getCurrAbsPath = function(){ return document.currentScript.src; };
여기에서는 현재 실행 중인 스크립트 요소를 반환하는 document.currentScript 개체가 사용되며, 스크립트 요소의 src 속성을 호출하여 스크립트 파일의 절대 경로를 얻을 수 있습니다.
[b] IE10+, Safari 및 Opera9
Error 객체의 stack 속성(IE10+), sourceURL 속성(Safari), stacktrace 속성(Opera9)을 이용하여 절대 경로를 추출합니다
var getCurrAbsPath = function(){ var a = {}, stack; try{ a.b(); } catch(e){ stack = e.stack || e.sourceURL || e.stacktrace; } var rExtractUri = /(?:http|https|file):\/\/.*?\/.+?.js/, absPath = rExtractUri.exec(stack); return absPath[0] || ''; };
[C] IE5.5~9
문서의 스크립트 태그를 탐색합니다
var getCurrAbsPath = function(){ var scripts = document.scripts; var isLt8 = ('' + document.querySelector).indexOf('[native code]') === -1; for (var i = scripts.length - 1, script; script = scripts[i--];){ if (script.readyState === 'interative'){ return isLt8 ? script.getAttribute('src', 4) : script.src; } } };
2. 관련 지식 소개
IE5.5~9에서 스크립트의 ReadyState는 스크립트 요소의 상태를 나타내며 다음과 같은 상태 값을 갖습니다.초기화되지 않음: 초기화되지 않음
로드 중: 로드 중
로드됨: 로드 완료
대화형: 실행
완료: 실행 완료
onreadystatechange 이벤트를 구독하면 스크립트 요소 상태 변경을 들을 수 있습니다. 하지만 로드된 상태와 완료된 상태는 불확실한 순서로 나타나며 그 중 하나만 나타날 수 있으므로, 스크립트 요소를 동적으로 추가할 때는 먼저 src 속성을 설정한 후 해당 스크립트 요소를 DOM 트리에 추가하는 것이 좋습니다. , 로드 및 완료 상태 중 하나만 표시되므로(요청할 때마다 표시됨) 모니터링하기가 더 쉽습니다.
3. IE와 FF에서의 또 다른 방법 window.onerror 이벤트를 구독하면 이벤트 핸들러 함수가 msg, url 및 num이라는 세 가지 매개변수를 허용합니다. 여기의 URL은 현재 스크립트의 절대 경로입니다.
위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.