๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Lect & Tip/javascript, jQuery

(Javascript)๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์ฝ˜์†”์ฐฝ ์ฐจ๋‹จ ๋ฐฉ๋ฒ• - ์‚ฌ์ดํŠธ ์ด๋™ [๊ฒฝ๊ณ ] ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๊ฐ€ ๊ฐ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

by ๋‚ฏ์„ ๊ณต๊ฐ„2019 2023. 12. 14.

(Javascript)๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์ฝ˜์†”์ฐฝ ์ฐจ๋‹จ ๋ฐฉ๋ฒ• - ์‚ฌ์ดํŠธ ์ด๋™ [๊ฒฝ๊ณ ] ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๊ฐ€ ๊ฐ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์ฐจ๋‹จ์˜ ํ•œ๊ณ„์™€ ์‹ค์šฉ์  ์ ‘๊ทผ

๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์ฐจ๋‹จํ•˜๋ ค๋Š” ์ฃผ๋œ ๋ชฉ์ ์€ ๋ณด์•ˆ ๊ฐ•ํ™”๋‚˜ HTML ๋ฐ CSS์˜ ์ˆจ๊น€์„ ์œ„ํ•จ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ค‘์š”ํ•œ ๊ฒƒ์€, ์ฝ˜์†” ์ฐฝ์„ ๋ง‰๋Š” ๊ฒƒ์ด ๊ธฐ์ˆ ์ ์œผ๋กœ ์™„๋ฒฝํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ, ์–ด๋Š ์ •๋„๋Š” ๋šซ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ด ๊ธฐ๋Šฅ์€ ๋ณด์กฐ์ ์ธ ์ˆ˜๋‹จ์œผ๋กœ๋งŒ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ฝ˜์†” ์ฐฝ ์ฐจ๋‹จ ์ฝ”๋“œ์˜ ์‚ฝ์ž… ์œ„์น˜์™€ ์˜ˆ์ œ

Stack Overflow์™€ ๊ฐ™์€ ์‚ฌ์ดํŠธ์—๋Š” ๋งŽ์€ ์ฝ˜์†” ์ฐฝ ์ฐจ๋‹จ ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €์˜ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ ๋ฌด๋ ฅํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ Ukjin Yang ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“  ์ฝ”๋“œ๊ฐ€ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์ฝ˜์†” ์ฐฝ์ด ์—ด๋ฆด ๋•Œ ํŠน์ • ์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‹ฐ์Šคํ† ๋ฆฌ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ, ์Šคํ‚จ ํŽธ์ง‘์— ๋Œ€ํ•œ ๊ธฐ์ดˆ ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ •๋ณด๋Š” seons-dev.tistory.com์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ˜์†” ์ฐฝ ์ฐจ๋‹จ ์ฝ”๋“œ๋ฅผ HTML ๋ฌธ์„œ์˜ </body> ํƒœ๊ทธ ๋ฐ”๋กœ ์œ„์— ์‚ฝ์ž…ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค:

<html>
  <body>
    <!-- ์—ฌ๊ธฐ์— ์ฝ”๋“œ ์ถ”๊ฐ€ -->
  </body>
</html>

์ฝ˜์†” ์ฐฝ ์ฐจ๋‹จ ์Šคํฌ๋ฆฝํŠธ ์˜ˆ์ œ

๋‹ค์Œ์€ ์ฝ˜์†” ์ฐฝ ์ฐจ๋‹จ์„ ์œ„ํ•œ JavaScript ์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค:

<script>
!function() {
  function detectDevTool(allow) {
    if(isNaN(+allow)) allow = 100;
    var start = +new Date();
    debugger;
    var end = +new Date();
    if(isNaN(start) || isNaN(end) || end - start > allow) {
      // ์—ฌ๊ธฐ์— ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ๊ฐ์ง€ ์‹œ ์‹คํ–‰ํ•  ์ฝ”๋“œ ์‚ฝ์ž…
    }
  }
  if(window.attachEvent) {
    if (document.readyState === "complete" || document.readyState === "interactive") {
      detectDevTool();
      window.attachEvent('onresize', detectDevTool);
      window.attachEvent('onmousemove', detectDevTool);
      window.attachEvent('onfocus', detectDevTool);
      window.attachEvent('onblur', detectDevTool);
    } else {
      setTimeout(argument.callee, 0);
    }
  } else {
    window.addEventListener('load', detectDevTool);
    window.addEventListener('resize', detectDevTool);
    window.addEventListener('mousemove', detectDevTool);
    window.addEventListener('focus', detectDevTool);
    window.addEventListener('blur', detectDevTool);
  }
}();
</script>

ํŠน์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ

  1. Alert ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€:
    ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๊ฐ€ ๊ฐ์ง€๋  ๋•Œ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋ ค๋ฉด, ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ•œ ๋ถ€๋ถ„์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค:
  2. alert('๊ฐœ๋ฐœ์ž ๋„๊ตฌ๊ฐ€ ๊ฐ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค!');
  3. ํŠน์ • ์‚ฌ์ดํŠธ๋กœ ์ด๋™:
    ํŠน์ • ์‚ฌ์ดํŠธ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋ ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:
  4. document.location.href="https://www.tistory.com/";
  5. ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ ์ถ”๊ฐ€:
    ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€์™€ ์‚ฌ์ดํŠธ ๋ฆฌ๋””๋ ‰์…˜์„ ๋™์‹œ์— ์ ์šฉํ•˜๋ ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค:
  6. alert('๊ฐœ๋ฐœ์ž ๋„๊ตฌ๊ฐ€ ๊ฐ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค!'); document.location.href="https://www.tistory.com/";

๊ฒฐ๊ณผ ํ™•์ธ

์ด์ œ ์›น์‚ฌ์ดํŠธ์—์„œ ์ฝ˜์†” ์ฐฝ์„ ์—ด๋ฉด, ๋””๋ฒ„๊น…์ด ์ผ์‹œ ์ •์ง€๋˜๊ณ , ์ผ์‹œ ์ •์ง€๋ฅผ ํ•ด์ œํ•˜๊ฑฐ๋‚˜ ์ฝ˜์†” ์ฐฝ์„ ๋‹ซ๋Š” ์ˆœ๊ฐ„ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ฑฐ๋‚˜ ์ง€์ •ํ•œ ์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์˜ ์‚ฌ์šฉ์„ ์™„์ „ํžˆ ๋ง‰์„ ์ˆ˜๋Š” ์—†์ง€๋งŒ, ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฝ๊ณ ๋ฅผ ์ฃผ๊ฑฐ๋‚˜ ๋ฆฌ๋””๋ ‰์…˜์„ ํ†ตํ•ด ์ผ์ • ๋ถ€๋ถ„ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ์ข…์ ์ธ ๋ณด์•ˆ์€ ์„œ๋ฒ„ ์ธก ์กฐ์น˜์™€ ํ•จ๊ป˜ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€