<script> 태그에 지정된 텍스트 / 자바 스크립트가 필요합니까?


157

나는 당신이 더 이상 스크립트 태그에 type="text/javascript"이상 CDATA하고 이상한 것을 필요로하지 않는 곳을 읽었습니다 <!--. 따라서 대신 :

<script type="text/javascript">
//<![CDATA[
<!--

    //your script here

-->
//]]>
</script>

당신은 단지 할 것입니다 :

<script>
    //your script here
</script>

나는 이것을 어디에서 읽었는지 기억할 수 없다. 그것은 내가 생각하는 Google 또는 Yahoo 엔지니어의 것이었고, 그들은 이러한 브라우저가 왜 고풍스러운 구성을 필요로했는지에 대해 언급했습니다. 누구든지이 블로그에 대해 어떤 블로그 게시물 / 기사에 대해 알고 있었는지, 또는 이에 대한 좋은 리소스를 가지고 있습니까?


새 브라우저의 경우, 이전 버전 (여전히 존재하는 경우)에는 <!-->가 필요합니다. 생략되지 않은 일부 앱의 유형에 대해서는 올바른 유형이 필요합니다.
Bakudan

1
CDATA에 대해 읽어보기 : stackoverflow.com/questions/66837/…
kapa

1
text/javascript지정된 파일을 열 때마다 제거합니다. 소음입니다.
머핀 맨

아주 관련 포스팅은 여기 허용 대답에서 HTML5 가이드 라인에 대한 최신 정보를 가지고.
RBT

답변:


135

태그 에서 Crockford의 글을<script> 참조하십시오 .

<!-- //-->스크립트와 함께 핵을 사용하지 마십시오 . 이 스크립트는 1 세대 브라우저 Netscape 1 및 Mosaic에서 스크립트가 텍스트로 표시되지 않도록하기위한 것입니다. 수년 동안 필요하지 않았습니다. <!-- //-->HTML 주석을 표시해야합니다. 주석은 컴파일 및 실행이 아닌 무시되어야합니다. 또한 HTML 주석은 포함하지 않으므로 --감소하는 스크립트에는 HTML 오류가 있습니다.

...

type="text/javascript"

이 속성은 선택 사항입니다. Netscape 2부터 모든 브라우저의 기본 프로그래밍 언어는 JavaScript입니다. XHTML에서는이 속성이 필요하고 불필요합니다. HTML에서는 생략하는 것이 좋습니다. 브라우저는 수행 할 작업을 알고 있습니다.


75
필요 하고 불필요합니까? 뭔가 빠졌습니까?
이즈 카타

17
@Izkata, 유효성 검사에 필요하지만 아무런 영향을 미치지 않습니다.
bdukes

14
지금은 "브라우저가해야 할 일을 알고 있습니다." 다음 주에 RubyScript (예를 들어 이것을 구성)가 대중화되고 모든 사람들이 바지를 긁어서 입양하면 어떨까요? 이것은 사람들이 파일 이름을 "_new"로 만들고 다른 사람들을 몇 년 동안 혼란스럽게 만드는 것과 같은 근시안적 사고입니다. "_new"입니까? 아니면 "_new_new"? 아니면 "_newer"? IMO 근시입니다.
Slobaum

18
HTML5 사양 인 @Slobaum은 기본적으로 JavaScript로 지정되어 있습니다. 새로운 스크립트 유형이있는 경우 스펙에서 해당 기본값을 지원하는 새로운 브라우저 버전에서만 구현됩니다.
bdukes

8
경우 RubyScript인기가된다, 그것은에 종료됩니다 .rbscript및 브라우저에 따라 동작합니다.
Kirk Strobeck

45

그것은이다 크록 포드의 추천. 나는 그것이 다른 곳에서 울리는 것을 보았습니다. HTML5 사양에는 필요하지 않습니다.

이상하게도 "type"속성을 사용하여 평가하고 싶지 않은 블록 을 표시하는 것은 다소 당혹스러운 이되었습니다.<script>

<script type='text/html-template'>
  <div> this is a template </div>
</script>

Javascript가 아닌 이상한 유형을 제공하면 다른 JavaScript 코드 (아마도 평가할 있는 스크립트 블록에 있음)에서 사용할 수 있도록 원시 텍스트를 페이지에 넣을 있습니다.


나는 완전히 이해할 수 없다. 무엇을 type="text/html"의미 하는지, 무엇을 의미 하는지 설명하십시오 text/javascript. thanks
T.Todua

4
@tazotodua "text / html"의 의미가별로 중요하지 않습니다. 중요한 것은 "텍스트 / 자바 스크립트" 가 아니며 브라우저는 <script>블록 의 내용을 완전히 무시한다는 것 입니다. 그러나이 <script> 됩니다 다른 자바 스크립트 코드를 발견하고 그 내용을 추출 할 수 있도록 DOM의 일부가됩니다.
Pointy

흥미로운 해킹입니다. 그래도 내가 무엇을 사용할지 잘 모르겠습니다.
brennanyoung

2
w3schools : In HTML5, the type attribute is no longer required for JavaScript. The default value is "application/javascript".
아민 Soheyli

19

HTML5에는 필요하지 않습니다 type="text/javascript"(기본값).

CDATA 스크립트에 HTML 문자 (예 : '<'및 '>')가 있으면 XHTML 페이지에만 필요합니다.

<!-- OLD 브라우저에만 필요합니다.


3

글쎄, 나는 text/javascript더 이상 아무도 사용 하지 않으며, 축소 도구조차도 아마도 그것을 제거 할 것이라고 말하고 싶어한다 ... 실제로 Facebook SDK 문서<script> .

그러나 Google SDK 설명서 에는 여전히가 text/javascript있습니다.

Amazon SDK 설명서 에는 여전히가 text/javascript있습니다.

Linkedin API 설명서 에는 여전히 text/javascript.

Instagram 은 여전히을 사용하고 text/javascript있습니다.


3

유형 속성은 스크립트 요소에 포함하거나 요소의 src 속성을 통해 참조 코드의 스크립트 언어를 식별합니다. 이것은 MIME 유형으로 지정됩니다. 지원되는 MIME 유형의 예로는 text / javascript, text / ecmascript, application / javascript 및 application / ecmascript가 있습니다.

에 따르면 HTML 4.01 사양

유형의 속성은 요소의 내용의 스크립트 언어를 지정하고 기본 스크립트 언어를 대체합니다. 스크립팅 언어는 컨텐츠 유형 (예 : "text / javascript")으로 지정됩니다. 작성자는이 속성에 값을 제공해야합니다. 이 속성에는 기본값이 없습니다.

그러나 HTML5 text/javascript 에서는 기본 유형이므로 생략 할 수 있습니다.

유형의 속성은 데이터의 스크립트 나 형식의 언어를 제공합니다. 속성이 존재하면 해당 값은 유효한 MIME 유형이어야합니다. 문자 세트 매개 변수를 지정하지 않아야합니다. 속성이없는 경우 사용되는 기본값은 "text / javascript"입니다.


1
즉, HTML5를 지원하지 않는 이전 브라우저에서는이를 생략하면 오류가 발생할 수 있습니다.
Serge

2

HTML5가 아닌 브라우저는 텍스트 / 자바 스크립트를 거의 항상 추측 할지라도 여전히 스펙에 맞게 유형을 정의 할 것으로 기대하는 반면, HTML5에서는 스크립트가 기본적으로 텍스트 / 자바 스크립트로 기본 설정된다는 의존성 으로이 기사를 생각할 수 있습니다. .


1

그것은 속성이 script아니라 헤더를 기반으로 블록을 올바르게 해석하는 것은 브라우저에 달려 type있습니다. 따라서 귀하의 질문에 대답하기 위해 최신 브라우저에는 필요하지 않습니다 (IE7 +, FF, Webkit을 말하고 있습니다). 그보다 오래된 브라우저를 지원하는 경우 ... 죄송합니다 =)


2
3 억 8 천 5 백만 이상의 사용자가있는 중국을 잊지 마십시오. 그 중 다수는 여전히 IE6를 사용합니다. netmarketshare.com/...
chainwork

3
중국의 엄격한 인터넷 정책을 알면 귀하의 사이트가 도달하지 못할 가능성이 있습니다 = P
hellatan

문제는 인라인 스크립트에 관한 것이므로 기본 페이지 이외의 헤더는 없습니다 (일부 HTML 컨텐츠 유형 임). 어쨌든, 브라우저가 헤더를 고려한다는 소스를 가지고 있습니까 (예 : 일반 <script src = "something"> </ script>가 있고 VBScript 헤더를 제공 한 경우 VBScript로 해석하는 브라우저가 있습니까) ?
Matthew Flaschen

1

당신은 스크립트 태그를 넣어하는 경우 SVG 안에 당신은 해야한다 type 속성을 지정합니다. 그리고 "text/ecmascript"오히려이어야 "text/javascript"합니다.

스크립트가 인라인 (링크되지 않음) 인 경우 스크립트 본문도 CDATA 선언으로 랩핑해야합니다. 따라서 SVG (및 기타 XML 변형)에 대한 인라인 스크립트 상용구 는

<script type="text/ecmascript">
<![CDATA[
// your javascript code goes here
]]>
</script>

이러한 경우는 '실제로'특수한 경우 일 수 있지만 실제로는 충분하며 SVG 사용이 증가하고 있으므로 다른 사람이 type 속성과 CDATA가 최신 브라우저에서 완전히 사용되지 않는다고 제안하는 것은 잘못입니다. 사용 사례는 좁지 만 아직 들어 본 적이 없습니다.

"환경을 반대 방향으로 바꾸면 모든 지혜가 어리 석음이됩니다." -애쉬 비


1
잘 했어 복잡한 SVG에서 작업 중이며 실제로는 그렇지 않습니다!
Dave Everitt

1

👉🏻 HTML5 사양은 작성자가 중복 MIME 유형을 제공하지 않고 속성을 생략 할 것을 촉구합니다. MDN

MIME 스니핑 표준 자바 스크립트는 어떤 MIME 타입 (사용하여 제공 될 수 있습니다 다목적 인터넷 메일 확장 다음과 일치) :

<script type="application/javascript"></script>
<script type="application/ecmascript"></script>

<script type="text/javascript"></script>
<script type="text/ecmascript"></script>

0

글쎄, 텍스트 / 자바 스크립트없이 더 많은 예제를 계속 보았지만 어떤 이유로 든 내 스크립트가 FF에서 작동하지 않습니다. 텍스트 / 자바 스크립트 선언을 유지하는 것이 좋습니다. 브라우저가 자바 스크립트를 끈 경우 CDATA 태그를 사용하면 웹 사이트에서 자바 스크립트가 일반 텍스트로 표시되지 않습니다. 개인적으로 나는 그 태그를 더 이상 사용하지 않고 더 이상 사용자가 없다고 생각하지 않으며 거기에 있다면 두뇌를 키울 수 있습니다 : P


실제로 골동품 브라우저를 타겟팅하지 않는 한 type 속성이나 오래된 CDATA는 필요하지 않습니다. 그러나 실제로 올바른 유형을 사용하는 한 아무것도 아프지 않아야합니다.
Pointy

가장 최근의 안정적인 FF 릴리스를 사용하고 있으며 텍스트 / 자바 스크립트를 선언하지 않고 구문 분석하는 데 문제가있는 것 같습니다 .jQuery btw를 사용하지만 차이가 없습니다.
Michael

글쎄요 <script>, "언어"나 "타입"이 아닌 스크립트 태그로 전체 웹 애플리케이션을 실행 하고 모든 브라우저에서 제대로 작동합니다. (잘, 모든 합리적인 것 : FF, Chrome, Safari, IE, Opera)
Pointy

1
@pointy는 FatherStorm이 왜 이런 일이 발생했는지에 대한 답변을 게시 한 것 같습니다. 귀하의 의견이 잘못된 것 같습니다.
Michael

@Michael XHTML / Strict로 실수를 저지르면 문제가있을 수 있지만 의심 스럽습니다. JavaScript 유형의 조명 사이에는 "type"속성이 불필요하며, 잘못된 "type"이 스크립트를 손상 시키므로 버그의 원인 일 뿐이라는 일반적인 동의가 있습니다.
Pointy

0

type="text/javascript" : HTML 4 및 XHTML에 필요하지만 HTML5에 선택적입니다.

CDATA : XHTML에 필요합니다.

<!--: 아주 오래된 브라우저에서 JavaScript를 숨기는 데 사용됩니다. 예 : Netscape 1과 Internet Explorer 2는 더 이상 사용하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.