</ body> 태그 뒤에 <script> 태그를 배치하는 것이 잘못 되었습니까?


219

본문 ( </body>) 의 닫는 태그 뒤에 스크립트 태그를 배치하는 것이 얼마나 잘못입니까 ? ?

<html>
  ....
  <body>
     ....
  </body>
  <script type="text/javascript" src="theJs.js"></script>
</html>

1
최신 브라우저에서 지원됩니까?
Xdrone

답변:


191

또는 태그 외부 에서는 유효성을 검사 하지 않습니다 . 또한 body 요소가 완전히로드되기 전에 IE중단 시킬 수있는 DOM 조작을하지 않는 한 닫는 직전에 배치하는 데 큰 차이가 없습니다 .<body><head></body>

<html>
  ....
  <body>
     ....
     <script type="text/javascript" src="theJs.js"></script>
  </body>
</html>

13
@epalla : body 태그의 끝에 스크립트를 넣으면로드 할 때까지로드 할 다른 내용이 없으므로 외부 또는 내부에 배치하는 것에는 차이가 거의 없습니다. 그런 다음 여전히 페이지 유효성 검사의 추가 이점을 얻었습니다. 이것은 내가 대답하려고했던 시점이었습니다.
Andy E

1
네 대답이 좋기 때문에 당신에게 동의했습니다. 방금 한 것처럼 JS를 헤드 대신 페이지 하단에 배치 해야하는 이유가 있다고 덧붙였습니다.
Matt Brunmeier

3
@PHPst : 음, 유효하지 않은 코드는 특정 브라우저에서 부작용을 일으킬 수 있습니다. 어느 쪽이든, 들여 쓰기가 위의 코드보다 하나의 탭 너비보다 작은 것이 어떻게 더 깨끗하게 보이는지 알 수 없습니다.
Andy E

1
@PHPst : 코드를 실제로 작성하려면 브라우저가 브라우저에 대처할 것으로 기대합니다. 그러나 여전히 유효성을 검사하기 위해 코드를 작성하는 것이 좋습니다.
Andy E

1
@technosaurus : 항상 <script src="..." defer>모든 주요 브라우저에서 작동합니다 (IE9 이하에서는 잠재적으로 버그가 발생하지만).
Andy E

88

예. 본문의 종료 태그 뒤에는 html 요소의 주석과 종료 태그 만 허용됩니다.

브라우저는 오류 복구를 수행 할 수 있지만 그에 의존해서는 안됩니다.


12
이것이 더 나은 대답입니다. 하나의 닫는 태그를 잘라 내고 붙여 넣을 때 모바일 장치가 잘못 작동 할 위험이있는 새로운 브라우저가 너무 많습니다.
Erik Reppen

33

앤디는 문서가 유효하지만, 그럼에도 불구하고 스크립트가 여전히 해석됩니다하지 것이라고 말했다. 예를 들어 WebKit 의 스 니펫 을 참조하십시오 .

void HTMLParser::processCloseTag(Token* t)
{
    // Support for really broken html.
    // we never close the body tag, since some stupid web pages close it before 
    // the actual end of the doc.
    // let's rely on the end() call to close things.
    if (t->tagName == htmlTag || t->tagName == bodyTag 
                              || t->tagName == commentAtom)
        return;
    ...

11
"실제로 깨진 HTML 지원." -나는 그것이 전부라고 생각합니다.
Diogo Kollross

8

IE는 더 이상 이것을 허용하지 않으며 (버전 10 이후) 그런 스크립트를 무시합니다. FF와 Chrome은 여전히 ​​허용하지만, 언젠가는 이것을 비표준으로 떨어 뜨릴 가능성이 있습니다.


1
그러나 Google은 "마지막으로 2014 년 4 월 10 일 업데이트"로 G + 로그인을 수행하는 방법에 대한 예를 보여줍니다. 서버의 Java 버전 ( developers.google.com/+/quickstart/java )에서 얻었지만 아마도 모두 동일한 HTML + js입니다.
Tom

2

W3C의 권장 프로세스에서 "element body"가 "parse error"인 경우 절차 적으로 "element script"를 삽입하십시오 . "트리 구성"에서 오류를 생성하고 "다시 토큰 화"를 실행하여 해당 컨텐츠를 처리하십시오. 추가 단계와 같습니다. 그런 다음에 만 "스크립트 실행"을 실행할 수 있습니다 . 스키마 프로세스를 참조하십시오 .

"구문 분석 오류"가 있습니다. "삽입 모드"를 "본문"으로 전환하고 토큰을 다시 처리하십시오.

기술적으로 브라우저를 통해 내부 프로세스, 표시 및 최적화 방법.

나는 누군가를 도왔기를 바랍니다.


0

예. 그러나 외부에 코드를 추가하면 대부분의 브라우저가 코드를 수정하므로 세계의 종말이 아닐 가능성이 있지만 여전히 들어가는 것은 나쁜 습관입니다.


0

실제로 'CSS 최적화'와 관련하여 권장합니다. 중요한 인라인 스타일을 인라인하고 나머지 파일 (css 파일)을 연기하는 것이 좋습니다.

예:

<html>
  <head>
    <style>
      .blue{color:blue;}
    </style>
    </head>
  <body>
    <div class="blue">
      Hello, world!
    </div>
  </body>
</html>
<noscript><link rel="stylesheet" href="small.css"></noscript>

참조 : https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery


8
body요소 외부에 물건을 두지 않아야합니다 . 그 구글 기사는 그 누구도 그런 일을하도록 조언하지 않습니다.
ChaseMoskal

2
구글 페이지가 실제로 정확히 그것을 말하는 것을 두려워합니다.
10us

6
한 번에 그 페이지 가 그런 것을 추천했지만 더 이상은 아닙니다. (이제 자바 스크립트로 동적 로딩이 있습니다.) 독일어 버전은 최신 버전이 아니며 여전히 이전 코드 예제를 포함합니다.
bodo

1
"element noscript"는 RFC에 의해 "element html"과 "element body"안에 있어야합니다
BG Bruno

0

최신 브라우저는 다음과 같이 본문에 스크립트 태그를 사용합니다.

<body>
    <script src="scripts/main.js"></script>
</body>

기본적으로 이는 페이지가 완료되면 스크립트가로드되며 이는 특정 경우 (예 : DOM 조작)에 유용 할 수 있음을 의미합니다. 그러나 동일한 스크립트를 가져와 "defer"와 함께 헤드 태그에 넣는 것이 좋습니다. 동일한 효과를 낼 것입니다.

<head>
    <script src="scripts/main.js" defer></script>
</head>

유용한 것은 script태그 event에 스크립트 구문 분석시기를 결정하기 위해 정의 할 수 있는 속성 이있는 경우에 유용합니다 . 따라서 event="load" event="DOMContentLoaded"DOM이 생성 된 후 또는 event="beforeunload"윈도우 beforeunload이벤트 에서 스크립트를 실행 해야 합니다 . 예 <script src="scripts/main.js" event="DOMContentLoaded"></script>.
1.21 기가 와트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.