Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

HTML5로 웹 브라우저에서 로컬 클라이언트 파일과 상호작용할 수 있나요?

결론부터 말씀드리면, HTML5는 보안상의 이유로 로컬 클라이언트 파일에 직접 접근하는 것을 허용하지 않습니다. 웹 페이지가 사용자 컴퓨터의 파일을 임의로 읽거나 수정할 수 있다면 심각한 보안 취약점이 발생하기 때문입니다.


다만 방법이 전혀 없는 것은 아닙니다. 드래그 앤 드롭(Drag and Drop) 기능이나 FileSystem API를 활용하면 사용자의 상호작용을 통해 제한적으로 로컬 파일과 데이터를 주고받을 수 있습니다.


드래그 앤 드롭 예제

다음은 HTML5의 드래그 앤 드롭 기능을 활용해 웹 브라우저에서 요소를 자유롭게 옮길 수 있도록 구현한 예제입니다. 보라색 박스를 직접 끌어다 놓아보세요.

<!DOCTYPE HTML>
<html>
   <head>
      <style>
         #boxA, #boxB {float:left;padding:10px;margin:10px; -moz-user-select:none;}
         #boxA { background-color: #6633FF; width:75px; height:75px; }
         #boxB { background-color: #FF6699; width:150px; height:150px; }
      </style>
      <script>
         function dragStart(ev) {
            ev.dataTransfer.effectAllowed='move';
            ev.dataTransfer.setData("Text", ev.target.getAttribute('id'));
            ev.dataTransfer.setDragImage(ev.target,0,0);
            return true;
         }
      </script>
   </head>
   <body>
      <center>
         <h2>Drag and drop HTML5 demo</h2>
         <div>Try to drag the purple box around.</div>
         <div id = "boxA" draggable = "true"
         ondragstart = "return dragStart(ev)">
         <p>Drag Me</p>
         </div>
         <div id = "boxB">Dustbin</div>
      </center>
   </body>
</html>

주요 코드 살펴보기

  • draggable="true": 해당 div 요소를 드래그할 수 있도록 설정합니다.
  • dragStart(ev): 드래그가 시작될 때 실행되는 이벤트 핸들러 함수입니다.
  • dataTransfer.setData(): 드래그되는 요소의 id 값을 데이터로 저장해 놓습니다(drop 대상에서 참조할 수 있음).
  • setDragImage(): 드래그 중 화면에 표시될 이미지를 지정합니다.

이처럼 HTML5의 드래그 앤 드롭 API를 사용하면 별도의 플러그인 없이도 브라우저 안에서 직관적인 파일 및 요소 조작 인터페이스를 손쉽게 만들 수 있습니다.