Library/JQuery

πŸ“š $.getScript() 동적 슀크립트 λ‘œλ”© μ‚¬μš©λ²•

인파_ 2022. 1. 7. 16:36

제이쿼리

제이쿼리 $.getScript()

$.getScript() λ©”μ†Œλ“œλŠ” μ˜ˆμ „μ— ajax톡신을 μœ„ν•œ api둜 μ“°μ΄λ˜ λ©”μ†Œλ“œλ‹€.

μš”μ¦˜μ€ fetch() λ‚˜ $.ajax() λ₯Ό μ‚¬μš©ν•˜κΈ°μ— 잘 μ•ˆμ“°μ΄λŠ” νŽΈμ΄μ§€λ§Œ, κ°„λ‹¨ν•œ μ½”λ“œλ‘œ 원격지 λ˜λŠ” 둜컬의 javascript νŒŒμΌμ„ λ™μ μœΌλ‘œ 읽어듀여 μ‹€ν–‰ν•˜λŠ” μ—­ν• λ‘œμ„œ 가끔 쓰이기도 ν•œλ‹€. λ‹€λ₯Έ λ„λ©”μΈμ˜ μžλ°”μŠ€ν¬λ¦½νŠΈλ„ 읽어듀일 수 μžˆλ‹€.

$.getScript(url, callback);
// url : μ½μ–΄λ“€μ΄λŠ” νŽ˜μ΄μ§€μ˜ μœ„μΉ˜
// callback : 톡신 μ„±κ³΅μ‹œμ˜ 콜백 ν•¨μˆ˜

 

예λ₯Όλ“€μ–΄ μ΄λŸ°μ‹μœΌλ‘œ λ‹¨μΆ•ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€. 바닐라 μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„  λ”°λ‘œ <script> νƒœκ·Έλ₯Ό μ„ μ–Έν•˜κ³  이벀트 λ¦¬μŠ€λ„ˆλ‘œ λ°›μ•„μ˜€λŠ” μ½”λ“œκ°€ κΈΈμ–΄μ‘Œμ§€λ§Œ,

<script id="devtool"></script>
<script>
 const $devtool = document.querySelector("#devtool");
 $devtool.src="./images/devtools-detector.js"
 $devtool.addEventListener("load", function(){
 	alert("슀크립트 λ‘œλ”©");
 }
</script>

μ œμ΄μΏΌλ¦¬μ—μ„œλŠ” ν•˜λ‚˜μ˜ λ©”μ†Œλ“œλ§Œ μ‚¬μš©ν•˜λ©΄ λ˜λŠ” κ±Έ μ•Œ 수 μžˆλ‹€. (콜백 뿐만 μ•„λ‹ˆλΌ ν”„λ‘œλ―ΈμŠ€λ„ μ§€μ›ν•œλ‹€.)

$.getScript("./images/devtools-detector.js", function(){
	alert("슀크립트 λ‘œλ”©");
});

콜백 인자 μ’…λ₯˜

$.getScript() λ©”μ†Œλ“œμ˜ 콜백 ν•¨μˆ˜μ˜ 각 λ§€κ°œλ³€μˆ˜ μ’…λ₯˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

$.getScript( "ajax/test.js", function( data, textStatus, jqxhr ) {
  console.log( data ); // λ°˜ν™˜ 된 데이터
  console.log( textStatus ); // Success
  console.log( jqxhr.status ); // 200
  console.log( "Load was performed." );
});

였λ₯˜ 처리 ν•˜κΈ°

만일 콜백 방식이 μ•„λ‹Œ ν”„λ‘œλ―ΈμŠ€ 객체 방식을 μ΄μš©ν•˜λ©΄ λ©”μ„œλ“œ μ²΄μ΄λ‹μœΌλ‘œ μ‹¬ν”Œν•˜κ²Œ 였λ₯˜ 처리 ꡬ성이 κ°€λŠ₯ν•˜λ‹€.

$.getScript( "ajax/test.js" )
  .done(function( script, textStatus ) { // ν”„λ‘œλ―ΈμŠ€ done() 지원
    console.log( textStatus );
  })
  .fail(function( jqxhr, settings, exception ) {
    $( "div.log" ).text( "Triggered ajaxError handler." );
});

# 참고자료

https://runebook.dev/ko/docs/jquery/jquery.getscript

https://api.jquery.com/jquery.getscript/