본문 바로가기

프로그래밍/[javascript] 자바스크립트

[JavaScript] 자바스크립트 innerHtml 사용법과 주의사항

by GenieIT* 2024. 12. 14.

728x90
728x90

 

1. innerHtml 설명

  • innerHTML은 JavaScript에서 DOM(Document Object Model) 요소의 HTML 콘텐츠를 가져오거나 수정하는 데 사용되는 속성입니다. 이 속성을 사용하면 특정 HTML 요소의 내부 내용을 동적으로 변경할 수 있습니다.

 


 

2. innerHtml의 특징

 

  • HTML 포함 콘텐츠 조작: 단순 텍스트뿐 아니라 HTML 태그를 포함하여 설정하거나 읽을 수 있습니다.
  • 읽기/쓰기 가능
    • 읽기: 특정 요소 내부의 HTML 콘텐츠를 가져옵니다.
    • 쓰기: 특정 요소 내부의 HTML 콘텐츠를 덮어씁니다.
  • HTML 태그 지원: 문자열로 입력된 HTML 태그가 파싱되어 실제 DOM 구조로 변환됩니다.

 


 

3. 사용 예제

3-1. HTML 요소 내용 읽기

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <script>
	document.addEventListener("DOMContentLoaded", function () {
	    let content = document.getElementById("example").innerHTML;
		console.log(content); // <strong>Hello, world!</strong>
	});
  </script>
</head>
<body>
  	<div id="example"><strong>Hello, world!</strong></div>
</body>
</html>

 

3-2. HTML 요소 내용 쓰기

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <script>
	document.addEventListener("DOMContentLoaded", function () {
	    document.getElementById("example").innerHTML = "<em>Updated content!</em>";
	});
  </script>
</head>
<body>
  	<div id="example"></div>
</body>
</html>

 

3-3. 동적 컨텐츠 업데이트 (시계 만들기)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <script>
	document.addEventListener("DOMContentLoaded", function () {
	   	function updateContent() {
			const currentTime = new Date().toLocaleTimeString();
	    	document.getElementById("clock").innerHTML = `Current Time: <strong>${currentTime}</strong>`;
		}
		
		setInterval(updateContent, 1000);
	});
  </script>
</head>
<body>
  	<div id="clock"></div>
</body>
</html>

 


 

4. 주의 사항

4-1. 기존 콘텐츠 덮어쓰기

innerHTML을 사용하면 해당 요소의 기존 콘텐츠가 모두 제거되고 새 콘텐츠로 덮어씌워집니다.

 

4-2. 스크립트 실행 문제

innerHTML로 동적으로 추가된 <script> 태그는 실행되지 않습니다.
document.body.innerHTML = "<script>alert('Hello');</script>";
// alert는 실행되지 않음

 

4-3. XSS(크로스 사이트 스크립팅) 공격 위험

사용자 입력값을 innerHTML에 직접 삽입하면 악성 스크립트가 실행될 위험이 있습니다.
let userInput = "<img src='x' onerror='alert(\"XSS\")'>";
document.getElementById("output").innerHTML = userInput;
// 악성 스크립트가 실행될 수 있음
해결 방법: 사용자 입력값을 사용할 경우 textContent를 사용하거나, HTML 인코딩 처리해야 합니다.

 


 

5. 대안

textContent: HTML 태그를 포함하지 않은 순수 텍스트를 설정하거나 읽을 때 사용합니다.
document.getElementById("example").textContent = "<strong>Safe content</strong>";
// 결과: &lt;strong&gt;Safe content&lt;/strong&gt;

 

DOM API: 요소를 추가/삭제할 때 appendChild, createElement 등을 사용하면 더 정교한 조작이 가능합니다.
let newElement = document.createElement("strong");
newElement.textContent = "Hello!";
document.getElementById("example").appendChild(newElement);

 


 

6. innerHtml 장점과 단점

장점
간단한 HTML 콘텐츠 조작.
빠르게 UI를 업데이트하는 데 유용.

단점
보안 취약점(XSS)에 노출될 가능성.
덮어쓰기로 인해 기존 이벤트 리스너가 제거됨.

 


 

 

 

728x90