<script>

This translation is in progress.

HTML <script> 요소는 실행 가능한 코드를 문서에 포함하거나 참조할 때 사용합니다. 보통 JavaScript 코드와 함께 쓰지만, WebGL의 GLSL 쉐이더 프로그래밍 언어 등 다른 언어와도 사용할 수 있습니다.

콘텐츠 카테고리 메타데이터 콘텐츠, 플로우 콘텐츠, 구문 콘텐츠.
허용된 콘텐츠 text/javascript와 같은 동적 스크립트.
태그 생략 None, both the starting and ending tag are mandatory.
허용된 부모 요소 메타데이터 콘텐츠 또는 구문 콘텐츠를 허용한 아무 요소.
허용된 ARIA 역할 없음
DOM 인터페이스 HTMLScriptElement

특성

이 요소는 전역 특성을 포함합니다.

async HTML5

일반 스크립트에 async 속성이 존재하면 HTML 분석 중에도 스크립트를 가져오며, 사용 가능해지는 즉시 평가를 수행합니다.

모듈 스크립트async 속성이 존재하면, HTML 분석 중에도 모듈 스크립트와 모든 의존성을 가져오며, 사용 가능해지는 즉시 모듈 스크립트의 평가를 수행합니다.

기존 방식은 브라우저가 HTML 분석을 계속하기 전에 스크립트를 불러오고 평가했어야 하므로, async 속성을 사용하면 분석기를 멈추는 JavaScript를 제거할 수 있습니다. 이 경우 defer도 비슷한 효력을 냅니다.

async는 불리언 속성입니다. 속성이 존재하면 참을 나타내고, 속성이 존재하지 않으면 거짓을 나타냅니다.

src 속성이 존재하지 않을 때(인라인 스크립트 등) 사용해서는 안됩니다. 아무런 효과도 없습니다.

브라우저 호환성을 참고하세요. See also Async scripts for asm.js.

crossorigin
일반 script 요소는 표준 CORS를 통과하지 못했을 때 window.onerror에 최소한의 정보만 넘깁니다. crossorigin 속성은 정적 미디어에 대해 별도의 도메인을 사용하는 사이트의 오류 기록을 허용하기 위해 사용할 수 있습니다. 유효한 인수에 대한 보다 자세한 설명은 CORS 설정 속성 문서를 참고하세요.
defer

브라우저가 이 스크립트를 문서 분석 이후에, 그러나 DOMContentLoaded 발생 이전에 실행해야 함을 나타내는 불리언 속성입니다.

defer 속성을 가진 스크립트는 자신을 다 가져온 후 평가 수행이 끝나기 전까지 DOMContentLoaded 이벤트의 발생을 막습니다.

src 속성이 존재하지 않을 때(인라인 스크립트 등) 사용해서는 안됩니다. 아무런 효과도 없습니다.

defer 속성을 가진 스크립트는 문서상의 순서를 따라 실행됩니다.

기존 방식은 브라우저가 HTML 분석을 계속하기 전에 스크립트를 불러오고 평가했어야 하므로, defer 속성을 사용하면 분석기를 멈추는 JavaScript를 제거할 수 있습니다. 이 경우 async도 비슷한 효력을 냅니다.

integrity
사용자 에이전트가 가져온 리소스에 예기치 못한 변형이 존재하는지 검사할 때 사용할 인라인 메타데이터. 하위 리소스 무결성 문서를 참고하세요.
nomodule
ES2015 모듈을 지원하는 브라우저에서는 실행하지 않을 스크립트인지 나타냅니다. 모듈화 JavaScript를 지원하지 않는 오래된 브라우저가 사용할 대체 스크립트에 사용합니다.
nonce
script-src 컨텐츠 보안 정책(script-src Content-Security-Policy)의 화이트 리스트에 인라인 스크립트를 등록하기 위한 암호화된 일회용 숫자(nonce)를 의미합니다. 서버는 정책을 전송할 때마다 고유한 일회용 숫자 값을 생성해야 합니다. 추측할 수 없는 일회용 숫자를 제공하는 것이 중요한데, 그렇지 않다면 자원의 정책을 우회하는 것은 대수롭지 않은 일입니다.
src
이 속성은 외부 스크립트의 URI를 나타낸다; 이는 문서 내에 스크립트를 직접 내장하는 것에 대한 대체 수단이 될 수 있습니다.

script 요소에 src 속성이 지정되어 있다면, 태그 내에 스크립트가 포함되지 않아야 합니다.

text
textContent 속성과 마찬가지로 이 속성은 요소의 문자 컨텐츠를 설정합니다. 하지만, 이 속성은 textContent 속성과는 달리 해당 노드(node)가 DOM에 삽입된 후에는 실행가능한 코드로 평가됩니다.
type

이 속성은 표시되는 스크립트 유형을 나타냅니다. 이 속성의 값은 다음 범주 중 하나입니다:

  • 생략 또는 JavaScript MIME 유형: HTML5호환 브라우저의 경우 스크립트가 JavaScript임을 나타냅니다. HTML5 스펙(Specification)에는 규격은 작성자가 불필요한 MIME유형을 제공하기보다는 속성을 생략할 것을 권장합니다. 초기 브라우저에서, 이 속성은 src 속성을 통해 임포트되거나(imported) 내장된(embedded) 코드의 스크립팅 언어를 식별하는데 사용되었습니다. JavaScript MIME 유형은 해당 스펙(specification)에 열거되어 있습니다.
  • module: HTML5 HTML5호환 브라우저의 경우 코드가 JavaScript 모듈로 취급됩니다. 스크립트 내용 처리는 charsetdefer 속성의 영향을 받지 않습니다. module 사용에 대한 자세한 내용은 ES6 in Depth: Modules을 참조하십시오. module 키워드가 사용된 경우 코드가 다르게 동작할 수 있습니다.
  • 다른 값: 내장된 콘텐츠는 브라우저에서 처리되지 않는 데이터 블록으로 취급됩니다. 개발자는 데이터 블록을 나타내는데 JavaScript MIME 유형이 아닌 유효한 MIME유형을 사용해야 합니다. src 속성은 무시됩니다.

각주: Firefox에서는 type 속성 내에 비표준인 version 매개변수를 포함함으로써 <script> 요소 내에 들어 있는 JavaScript의 버전을 명시할 수 있습니다. 예를 들면, type="application/javascript;version=1.8"과 같습니다. 이는 Firefox 59에서는 제거되었습니다(bug 1428745 참조).

사라질 속성

language
type 속성과 마찬가지로, 이 속성은 사용하는 스크립팅 언어를 나타냅니다. 하지만, type 속성과는 달리, 이 속성에 사용가능한 값은 표준화되지 않았습니다. type 속성을 대신 사용해야 합니다.

참고

인라인 스크립트뿐만 아니라 asyncdefer 속성이 설정되지 않은 스크립트는 브라우저가 페이지에 대한 파싱을 계속하기 전에 즉시 가져와(fetched) 실행합니다.

스크립트는 text/javascript로 MIME 유형을 설정해야 하나, 브라우저는 이에 대해 관대하며 스크립트가 이미지 형태 (image/*); 비디오 형태 (video/*); 오디오 형태 (audio/*); 또는 text/csv 형태인 경우에만 차단합니다. 스크립트가 차단될 때, load 이벤트가 전송되지 않는 경우라면, error 이벤트가 해당 요소로 전송됩니다.

예제

기본

다음 예제는 HTML4와 HTML5 모두에 대해 <script> 요소를 이용하여 스크립트를 임포트하는 법을 보여줍니다.

<!-- HTML4 and (x)HTML -->
<script type="text/javascript" src="javascript.js"></script>

<!-- HTML5 -->
<script src="javascript.js"></script>

모듈 폴백(Module Fallback)

type 속성에 대한 module을 지원하는 브라우저는 nomodule 속성을 가지는 스크립트를 무시합니다. 이는 fallback을 지원하지 않는 브라우저에서 module을 사용하는 방법을 제공합니다.

<script type="module" src="main.mjs"></script>
<script nomodule src="fallback.js"></script>

명세

Specification Status Comments
HTML Living Standard
The definition of '<script>' in that specification.
Living Standard Removed the charset attribute
HTML 5.2
The definition of '<script>' in that specification.
Recommendation Adds the module type
HTML 5.1
The definition of '<script>' in that specification.
Recommendation
HTML5
The definition of '<script>' in that specification.
Recommendation
HTML 4.01 Specification
The definition of '<script>' in that specification.
Recommendation

브라우저 호환성

Update compatibility data on GitHub
DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung Internet
scriptChrome Full support 1Edge Full support 12Firefox Full support 1
Notes
Full support 1
Notes
Notes Starting in Firefox 4, inserting <script> elements that have been created by calling document.createElement("script") no longer enforces execution in insertion order. This change lets Firefox properly abide by the specification. To make script-inserted external scripts execute in their insertion order, set .async=false on them.
IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
asyncChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
crossoriginChrome Full support 30Edge Full support YesFirefox Full support 13IE No support NoOpera Full support 12Safari Full support Yes
Notes
Full support Yes
Notes
Notes The crossorigin attribute was implemented in WebKit in WebKit bug 81438.
WebView Android Full support YesChrome Android Full support YesFirefox Android Full support 14Opera Android ? Safari iOS ? Samsung Internet Android Full support Yes
deferChrome Full support Yes
Notes
Full support Yes
Notes
Notes Chrome does not defer scripts with the defer attribute when the page is served as XHTML (application/xhtml+xml) - Chromium Issue #611136, Chromium Issue #874749
Edge Full support 12Firefox Full support 3.5
Notes
Full support 3.5
Notes
Notes Since Firefox 3.6, the defer attribute is ignored on scripts that don't have the src attribute. However, in Firefox 3.5 even inline scripts are deferred if the defer attribute is set.
IE Full support 10
Notes
Full support 10
Notes
Notes In versions prior to Internet Explorer 10, it implemented defer by a proprietary specification. Since version 10 it conforms to the W3C specification.
Opera Full support Yes
Notes
Full support Yes
Notes
Notes Opera does not defer scripts with the defer attribute when the page is served as XHTML (application/xhtml+xml) - Chromium Issue #611136, Chromium Issue #874749
Safari Full support YesWebView Android Full support Yes
Notes
Full support Yes
Notes
Notes WebView does not defer scripts with the defer attribute when the page is served as XHTML (application/xhtml+xml) - Chromium Issue #611136, Chromium Issue #874749
Chrome Android Full support Yes
Notes
Full support Yes
Notes
Notes Chrome does not defer scripts with the defer attribute when the page is served as XHTML (application/xhtml+xml) - Chromium Issue #611136, Chromium Issue #874749
Firefox Android Full support 4Opera Android Full support Yes
Notes
Full support Yes
Notes
Notes Opera does not defer scripts with the defer attribute when the page is served as XHTML (application/xhtml+xml) - Chromium Issue #611136, Chromium Issue #874749
Safari iOS Full support YesSamsung Internet Android Full support Yes
Notes
Full support Yes
Notes
Notes Samsung Internet does not defer scripts with the defer attribute when the page is served as XHTML (application/xhtml+xml) - Chromium Issue #611136, Chromium Issue #874749
integrityChrome Full support 45Edge Partial support 17Firefox Full support 43IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support 45Chrome Android Full support 45Firefox Android Full support 43Opera Android ? Safari iOS No support NoSamsung Internet Android Full support 5.0
language
DeprecatedNon-standard
Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
nomodule
Experimental
Chrome Full support 61Edge Full support 16Firefox Full support 60
Full support 60
No support 55 — 60
Disabled
Disabled From version 55 until version 60 (exclusive): this feature is behind the dom.moduleScripts.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.
IE No support NoOpera Full support 48Safari Full support 11WebView Android Full support 61Chrome Android Full support 61Firefox Android Full support 60
Full support 60
No support 55 — 60
Disabled
Disabled From version 55 until version 60 (exclusive): this feature is behind the dom.moduleScripts.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.
Opera Android Full support 45Safari iOS Full support 11Samsung Internet Android Full support 8.0
referrerPolicyChrome Full support 70Edge ? Firefox Full support 65IE No support NoOpera Full support YesSafari No support NoWebView Android Full support 70Chrome Android Full support 70Firefox Android Full support 65Opera Android ? Safari iOS No support NoSamsung Internet Android Full support 10.0
srcChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
textChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
typeChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yes
type.moduleChrome Full support 61Edge Full support 16Firefox Full support 60
Full support 60
No support 54 — 60
Disabled
Disabled From version 54 until version 60 (exclusive): this feature is behind the dom.moduleScripts.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.
IE No support NoOpera Full support 48Safari Full support 10.1WebView Android Full support 61Chrome Android Full support 61Firefox Android Full support 60
Full support 60
No support 54 — 60
Disabled
Disabled From version 54 until version 60 (exclusive): this feature is behind the dom.moduleScripts.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.
Opera Android Full support 45Safari iOS Full support 10.3Samsung Internet Android Full support 8.0
type: The version parameter of the type attribute
Non-standard
Chrome No support NoEdge No support NoFirefox No support ? — 59IE No support NoOpera No support NoSafari No support NoWebView Android No support NoChrome Android No support NoFirefox Android No support ? — 59Opera Android No support NoSafari iOS No support NoSamsung Internet Android No support No

Legend

Full support  
Full support
Partial support  
Partial support
No support  
No support
Compatibility unknown  
Compatibility unknown
Experimental. Expect behavior to change in the future.
Experimental. Expect behavior to change in the future.
Non-standard. Expect poor cross-browser support.
Non-standard. Expect poor cross-browser support.
Deprecated. Not for use in new websites.
Deprecated. Not for use in new websites.
See implementation notes.
See implementation notes.
User must explicitly enable this feature.
User must explicitly enable this feature.

호환성 참고사항

async 특성을 지원하지 않는 이전 브라우저에서는 구문 분석기가 삽입한(parser-inserted) 스크립트가 구문 분석기를 차단합니다; 스크립트에 의해 삽입된(script-inserted) 스크립트는 IE와 WebKit에서 비동기적으로 실행되나 Opera나 Firefox 4보다 앞선 버전에서는 동기적으로 실행됩니다. Firefox 4에서 스크립트가 생성한 스크립트에 대한 DOM의 async 속성은 기본적으로 true로 설정되어 있으므로 기본 동작은 IE나 WebKit의 동작과 일치합니다.

document.createElement("script").asynctrue로 평가되는 브라우저(Firefox 4와 같은)에서 스크립트에 의해 삽입된 외부 스크립트를 삽입 순서대로 실행되도록 하려면, 순서대로 실행되기를 원하는 스크립트에 대해 .async=false로 설정하십시오.

비동기 스크립트에서는 절대로 document.write()를 호출하지 마십시오. Firefox 3.6에서는 document.write()를 호출하는 것이 예기치 못한 영향을 줍니다. Firefox 4에서, 비동기 스크립트로부터 document.write()를 호출하는 것은 아무런 영향이 없습니다(에러 콘솔에 경고를 출력하는 것 말고는).

같이 보기