자바 스크립트 파일을 동적으로로드하는 중에 오류가 발생했습니다.

내 웹 페이지에서 자바 스크립트 파일을 지연 (동적으로)로드하려고합니다.

나는 이것을 사용했다 :

http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml

   function loadjscssfile(filename, filetype){
    if (filetype=="js"){ //if filename is a external JavaScript file
        var fileref=document.createElement('script')
        fileref.setAttribute("type","text/javascript")
        fileref.setAttribute("src", filename)
    }
    else if (filetype=="css"){ //if filename is an external CSS file
        var fileref=document.createElement("link")
        fileref.setAttribute("rel", "stylesheet")
        fileref.setAttribute("type", "text/css")
        fileref.setAttribute("href", filename)
    }
    if (typeof fileref!="undefined")
        document.getElementsByTagName("head")[0].appendChild(fileref)
}

loadjscssfile("myscript1.js", "js") //dynamically load and add this .js file
loadjscssfile("myscript2.js", "js") //dynamically load and add this .js file
loadjscssfile("myscript3.js", "js") //dynamically load and add this .js file

이 3 개의 스크립트는 순서대로로드됩니다.

myscript3은 myscript2에 종속
되고 myscript2는 myscript1에 종속됩니다.

이런 식으로로드하려고하면 이상하게 작동합니다.

의도 한 순서대로로드되지 않은 것처럼 보이 므로 정의되지 않은 오류 가 때때로 발생하고 오류가 발생하지 않는 경우도 있습니다 .

내가 뭔가 잘못하고 있니?


업데이트 :

이 코드를 사용하여 올바른 순서로 파일을로드하고 있습니다.

 function loadjscssfile(filename, filetype) {
        if (filetype == "js") { //if filename is a external JavaScript file
            var fileref = document.createElement('script')
            fileref.setAttribute("type", "text/javascript")
            fileref.setAttribute("src", filename)
        }
        else if (filetype == "css") { //if filename is an external CSS file
            var fileref = document.createElement("link")
            fileref.setAttribute("rel", "stylesheet")
            fileref.setAttribute("type", "text/css")
            fileref.setAttribute("href", filename)
        }
        return fileref;
    }

    function loadSync(files, types) {
        if (typeof (files[0]) === 'undefined') return false;
        var script = loadjscssfile(files[0], types[0]);
        script.onload = function () {
            files.shift();
            types.shift();
            loadSync(files, types);
        }
        if (typeof script != "undefined")
            document.getElementsByTagName("head")[0].appendChild(script)
    }

    loadSync(['scripts/module3.base.js', 'scripts/module3.core.js', 'scripts/module3.init.js'], ['js', 'js', 'js']);
    console.log('this should get printed when all the three files are loaded');


그러나 콘솔 출력은 다음과 같습니다.

this should get printed when all the three files are loaded
scripts/module3.base.js:9 base is initialised
scripts/module3.core.js:6 core is initialised
scripts/module3.init.js:3 app is initialsed

loadSync에 대한 첫 번째 호출 자체가 비동기 호출 인 것 같습니다.

오마르 엘라 와디

동기식으로로드 할 수 있습니다.

function get_contents(file){
   var xhr = new XMLHttpRequest();
   xhr.open('get', file, false);
   xhr.send();
   return xhr.responseText;
 }

function loadjscssfile(filename, filetype){
var content = get_contents(filename);
if (filetype=="js"){ //if filename is a external JavaScript file
    var fileref=document.createElement('script');
    fileref.setAttribute("type","text/javascript");
    fileref.innerHTML = content;
}
else if (filetype=="css"){ //if filename is an external CSS file
    var fileref=document.createElement("link")
    fileref.setAttribute("rel", "stylesheet")
    fileref.setAttribute("type", "text/css")
    fileref.innerHTML = content;
}
if (typeof fileref!="undefined")
    document.getElementsByTagName("head")[0].appendChild(fileref)
}

외부에서로드하려면 :

두 가지 방법이 있습니다.

또 다른 답변으로 콜백.

또는 다음을 수행 할 수 있습니다.

function loadjscssfile(filename, filetype){
    if (filetype=="js"){ //if filename is a external JavaScript file
        var fileref=document.createElement('script')
        fileref.setAttribute("type","text/javascript")
        fileref.setAttribute("src", filename)
    }
    else if (filetype=="css"){ //if filename is an external CSS file
        var fileref=document.createElement("link")
        fileref.setAttribute("rel", "stylesheet")
        fileref.setAttribute("type", "text/css")
        fileref.setAttribute("href", filename)
    }
    return fileref;
}

function loadSync(files,types){
    if(files[0] === 'undefined')return false; //if there's no files to load
    var script = loadjscssfile(files[0],types[0]); //load first file
    script.onload = function(){//after the script is loaded delete them and continue;
        files.shift();
        types.shift();
        loadSync(files,types);
    }
    if (typeof script !="undefined")
        document.getElementsByTagName("head")[0].appendChild(script)
}

loadSync(["myscript1.js","myscript2.js","myscript3.js"],['js','js','js']);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

자바 스크립트에서 Json을 구문 분석하는 동안 오류가 발생했습니다.

분류에서Dev

자바 스크립트 코드에서 Cmd 명령을 실행할 때 오류가 발생했습니다.

분류에서Dev

자바에서 자바 스크립트 코드를 실행하는 동안 오류가 발생했습니다.

분류에서Dev

매개 변수를 자바 스크립트 함수에 동적으로 전달하는 동안 오류가 발생했습니다.

분류에서Dev

쉘 스크립트에서 여러 파일의 이름을 바꾸기 위해 for 루프를 실행하는 동안 오류가 발생했습니다.

분류에서Dev

IPFS에 파일을 업로드하는 동안 오류가 발생했습니다 (TypeError : 예상 문자열 또는 바이트 유사 객체).

분류에서Dev

파일을 덮어 쓰는 동안 자바 스크립트에서 오류가 발생합니다.

분류에서Dev

자바 스크립트에서 자동 호출 익명 기능을 만드는 동안 오류가 발생했습니다.

분류에서Dev

Flask의 변수를 자바 스크립트 코드로 표시하는 중에 오류가 발생했습니다.

분류에서Dev

div 태그의 HTML에 자바 스크립트를 사용하여 UL을 추가 할 때 오류가 발생했습니다.

분류에서Dev

생성 된 동일한 스크립트에서 boto3을 사용하여 파일을 업로드하려고했지만 오류가 발생했습니다. 해당 파일 또는 디렉토리가 없습니다.

분류에서Dev

Microsoft Teams 추가 기능을 테스트 용으로로드하는 중 오류가 발생했습니다.

분류에서Dev

정확히 동일한 파일 유형을 가진 디렉토리에서 스크립트를 반복하는 동안 오류가 발생했습니다.

분류에서Dev

쉘 스크립트에서 awk 명령을 실행하는 동안 오류가 발생했습니다.

분류에서Dev

자바 스크립트에서 루프를 사용하여 한 개체에서 두 개체를 만드는 동안 오류가 발생했습니다.

분류에서Dev

cygwin 기반 쉘 스크립트에서 ffmpeg를 사용하여 mkv 파일을 연결하는 동안 오류가 발생했습니다.

분류에서Dev

각도 js에서 텍스트 상자 값을 가져 오는 동안 오류가 발생했습니다.

분류에서Dev

Selenium WebDriver 테스트 용 자바 스크립트를 사용하여 드래그 앤 드롭을 실행하려고 할 때 오류가 발생했습니다.

분류에서Dev

자바 스크립트 배열에서 항목을 삭제하면 오류가 발생합니다.

분류에서Dev

중고품 생성 클래스를 Java 1.5로 컴파일하는 동안 오류가 발생했습니다.

분류에서Dev

텍스트 "0"을 숫자 0으로 변환하는 동안 오류가 발생했습니다.

분류에서Dev

바이트 코드를 dex로 변환하는 중에 오류가 발생했습니다.

분류에서Dev

Datalab 노트북 (모든 파일)을 여는 중에 오류가 발생했습니다. Dataflow 연결 없음

분류에서Dev

선택기를 채우기 위해 자바 스크립트 맵을 사용하여 키 값 쌍을 읽는 동안 오류가 발생했습니다.

분류에서Dev

오류 : 바이너리 XML 파일 줄 # 2 : Google Map V2에서 클래스 조각을 부 풀리는 동안 오류가 발생했습니다.

분류에서Dev

자바 (11)와 E (FX) clipse 자바 FX 플러그인 이클립스 4.9에 :는 오류가 발생했습니다 -하면 로그 파일을 참조하십시오

분류에서Dev

자바 스크립트를 사용하여 MVC에서 그리드 길이를 찾는 데 오류가 발생했습니다.

분류에서Dev

일시 중지 된 배치 스크립트에 의해 저장된 데이터 파일을 대화식으로로드하려고 할 때 오류가 발생했습니다.

분류에서Dev

앱 스토어에 앱을 업로드하는 중에 오류가 발생했습니다.

Related 관련 기사

  1. 1

    자바 스크립트에서 Json을 구문 분석하는 동안 오류가 발생했습니다.

  2. 2

    자바 스크립트 코드에서 Cmd 명령을 실행할 때 오류가 발생했습니다.

  3. 3

    자바에서 자바 스크립트 코드를 실행하는 동안 오류가 발생했습니다.

  4. 4

    매개 변수를 자바 스크립트 함수에 동적으로 전달하는 동안 오류가 발생했습니다.

  5. 5

    쉘 스크립트에서 여러 파일의 이름을 바꾸기 위해 for 루프를 실행하는 동안 오류가 발생했습니다.

  6. 6

    IPFS에 파일을 업로드하는 동안 오류가 발생했습니다 (TypeError : 예상 문자열 또는 바이트 유사 객체).

  7. 7

    파일을 덮어 쓰는 동안 자바 스크립트에서 오류가 발생합니다.

  8. 8

    자바 스크립트에서 자동 호출 익명 기능을 만드는 동안 오류가 발생했습니다.

  9. 9

    Flask의 변수를 자바 스크립트 코드로 표시하는 중에 오류가 발생했습니다.

  10. 10

    div 태그의 HTML에 자바 스크립트를 사용하여 UL을 추가 할 때 오류가 발생했습니다.

  11. 11

    생성 된 동일한 스크립트에서 boto3을 사용하여 파일을 업로드하려고했지만 오류가 발생했습니다. 해당 파일 또는 디렉토리가 없습니다.

  12. 12

    Microsoft Teams 추가 기능을 테스트 용으로로드하는 중 오류가 발생했습니다.

  13. 13

    정확히 동일한 파일 유형을 가진 디렉토리에서 스크립트를 반복하는 동안 오류가 발생했습니다.

  14. 14

    쉘 스크립트에서 awk 명령을 실행하는 동안 오류가 발생했습니다.

  15. 15

    자바 스크립트에서 루프를 사용하여 한 개체에서 두 개체를 만드는 동안 오류가 발생했습니다.

  16. 16

    cygwin 기반 쉘 스크립트에서 ffmpeg를 사용하여 mkv 파일을 연결하는 동안 오류가 발생했습니다.

  17. 17

    각도 js에서 텍스트 상자 값을 가져 오는 동안 오류가 발생했습니다.

  18. 18

    Selenium WebDriver 테스트 용 자바 스크립트를 사용하여 드래그 앤 드롭을 실행하려고 할 때 오류가 발생했습니다.

  19. 19

    자바 스크립트 배열에서 항목을 삭제하면 오류가 발생합니다.

  20. 20

    중고품 생성 클래스를 Java 1.5로 컴파일하는 동안 오류가 발생했습니다.

  21. 21

    텍스트 "0"을 숫자 0으로 변환하는 동안 오류가 발생했습니다.

  22. 22

    바이트 코드를 dex로 변환하는 중에 오류가 발생했습니다.

  23. 23

    Datalab 노트북 (모든 파일)을 여는 중에 오류가 발생했습니다. Dataflow 연결 없음

  24. 24

    선택기를 채우기 위해 자바 스크립트 맵을 사용하여 키 값 쌍을 읽는 동안 오류가 발생했습니다.

  25. 25

    오류 : 바이너리 XML 파일 줄 # 2 : Google Map V2에서 클래스 조각을 부 풀리는 동안 오류가 발생했습니다.

  26. 26

    자바 (11)와 E (FX) clipse 자바 FX 플러그인 이클립스 4.9에 :는 오류가 발생했습니다 -하면 로그 파일을 참조하십시오

  27. 27

    자바 스크립트를 사용하여 MVC에서 그리드 길이를 찾는 데 오류가 발생했습니다.

  28. 28

    일시 중지 된 배치 스크립트에 의해 저장된 데이터 파일을 대화식으로로드하려고 할 때 오류가 발생했습니다.

  29. 29

    앱 스토어에 앱을 업로드하는 중에 오류가 발생했습니다.

뜨겁다태그

보관