Почему не работают самозакрывающиеся элементы скрипта? - PullRequest
1241 голосов
/ 16 сентября 2008

По какой причине браузеры неправильно распознают:

<script src="foobar.js" /> <!-- self-closing script element -->

Только это признается:

<script src="foobar.js"></script>

Это нарушает концепцию поддержки XHTML?

Примечание. Это утверждение верно по крайней мере для всех версий IE (6-8 beta 2).

Ответы [ 11 ]

2 голосов
/ 22 ноября 2017

Разница между 'true XHTML', 'faux XHTML' и HTML, а также важность типа MIME, отправляемого сервером, уже хорошо описана здесь . Если вы хотите попробовать это прямо сейчас, вот простой редактируемый фрагмент с предварительным просмотром в реальном времени, включая самозакрывающийся тег сценария для браузеров с поддержкой:

div { display: flex; }
div + div {flex-direction: column; }
<div>Mime type: <label><input type="radio" onchange="t.onkeyup()" id="x" checked  name="mime"> application/xhtml+xml</label>
<label><input type="radio" onchange="t.onkeyup()" name="mime"> text/html</label></div>
<div><textarea id="t" rows="4" 
onkeyup="i.src='data:'+(x.checked?'application/xhtml+xml':'text/html')+','+encodeURIComponent(t.value)"
><?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
[<!ENTITY x "true XHTML">]>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
  <p>
    <span id="greet" swapto="Hello">Hell, NO :(</span> &x;.
    <script src="data:text/javascript,(g=document.getElementById('greet')).innerText=g.getAttribute('swapto')" />
    Nice to meet you!
    <!-- 
      Previous text node and all further content falls into SCRIPT element content in text/html mode, so is not rendered. Because no end script tag is found, no script runs in text/html
    -->
  </p>
</body>
</html></textarea>

<iframe id="i" height="80"></iframe>

<script>t.onkeyup()</script>
</div>

Вы должны увидеть Hello, true XHTML. Nice to meet you! ниже текстовой области.

Для неспособных браузеров вы можете скопировать содержимое текстовой области и сохранить его в виде файла с расширением .xhtml (или .xht) ( спасибо Алеку за эту подсказку ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...