Чому елементи самозакриття сценарію не працюють?


1346

З якої причини браузери неправильно розпізнають:

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

Лише це визнається:

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

Чи порушує це концепція підтримки XHTML?

Примітка. Це твердження є правильним принаймні для всіх IE (6-8 бета-версія 2).


12
Працює в Chrome і Opera
corymathews

46
Здається, що деякі останні версії Chrome порушили це, теги сценарію, що самозамикається, більше не працюють у Chrome
Адам Несс

13
Це не лише теги сценаріїв. Я також не вірю, що теги Div із самозамиканням також працюють.
DOK

6
Станом на липень 2011 року у Chrome та Firefox виникли ці проблеми. "Це не помилка, це особливість" - дійсно дратує.
Мартін Конічек

4
Більш загальна версія цього було запропоновано два дні по тому: stackoverflow.com/questions/97522 / ...
Чіро Сантіллі冠状病毒审查六四事件法轮功

Відповіді:


481

Специфікація XHTML 1 говорить:

С.3. Мінімізація елементів та вміст порожніх елементів

З огляду на порожній екземпляр елемента, модель вмісту якого немає EMPTY(наприклад, порожній заголовок чи абзац), не використовуйте мінімізовану форму (наприклад, використання <p> </p>та ні <p />).

XHTML DTD задає елементи сценарію як:

<!-- script statements, which may include CDATA sections -->
<!ELEMENT script (#PCDATA)>

111
Проте "не робити" не те саме, що "не повинен". Це настанова (щодо сумісності, як це запропоновано назвою розділу), а не правило.
Конрад Рудольф

42
Насправді я не можу знайти жодного використання для цього обмеження :) Це здається абсолютно штучним.
ескадра

22
Правильну відповідь дав olavk. Додаток C до XHTML 1.0 не є причиною того, що все є таким, яким він є, а просто як обходитись так, як є.
hsivonen

32
Це не нормативна частина специфікації. Це лише додаток про те, як поводитися з браузерами, які не підтримують XHTML
Kornel

12
Проблема <script />полягає не в тому, що специфікація забороняє її, а те, що браузери не інтерпретують це як "не тег-суп", якщо тип вмісту не є application / xhtml + xml. Див: stackoverflow.com/questions/348736 / ... @shabunc: браузери можуть з'явитися , щоб зрозуміти це, але то , що на насправді відбувається, це покласти вміст після <p /> всередині абзацу, з - за інтерпретації цитати squadette в тому сенсі , що оскільки < p> не порожній, він не може бути самозакритим. У XHTML 1.1 він може бути самозакритим.
Джо

241

Щоб додати те, що сказали Бред та скуадетта, синтаксис XML, що самозамикається, <script />насправді є правильним XML, але для того, щоб він працював на практиці, ваш веб-сервер також повинен надіслати ваші документи як належним чином сформовані XML з XML-міметиком, як application/xhtml+xmlу HTTP Заголовок типу вмісту (а не як text/html).

Однак, надсилання mimetype XML призведе до того, що ваші сторінки не будуть розбиратися IE7, що лише подобається text/html.

Від w3 :

Підсумовуючи, 'application / xhtml + xml' ПОТРІБНО використовувати для документів XHTML Family, а використання 'text / html' ОБОВ'ЯЗКОВО бути обмеженим HTML-сумісними документами XHTML 1.0. "application / xml" та "text / xml" МОЖЕ бути також використаними, але коли це можливо, "application / xhtml + xml" ПОТРІБНО використовуватись, а не загальні типи носіїв XML.

Я спантеличив це кілька місяців тому, і єдиним працездатним (сумісним з FF3 + та IE7) рішенням було використання старого <script></script>синтаксису з text/html(синтаксис HTML + міметик HTML).

Якщо ваш сервер надсилає text/htmlтип у своїх заголовках HTTP, навіть якщо в іншому випадку правильно сформовані документи XHTML, FF3 + використовуватиме свій режим візуалізації HTML, що означає, що <script />це не буде працювати (це зміна, Firefox раніше був менш суворим).

Це станеться незалежно від будь-якого зіткнення з http-equivметаелементами, прологом XML або доктіптом XML у вашому документі - Firefox розгалужується, як тільки він отримає text/htmlзаголовок, який визначає, чи HTML чи XML-аналізатор виглядає всередині документа, і HTML-аналізатор не розуміє <script />.


3
Чи правильно тоді робити висновок, що якщо ви припините підтримку IE7, надсилання text / xml отримає вам широку підтримку браузера для <script />?
Кріс Москіні

7
Отже, коротше, <script /> буде працювати лише у тому випадку, якщо ваш тип сторінки MIME - xhtml / xml. Для звичайних текстів / html-сторінок це не працюватиме. І якщо ми спробуємо використати MIME тип "xhtml / xml", це порушить сумісність IE. Підводячи підсумок, зберігайте спокій і використовуйте <script> ... </script> Дякую Джо ;-)
Navin Israni

1
Відмінне пояснення. Ще один момент, який варто зауважити, - це те, що Firefox також матиме локальні .htmlфайли у вигляді супу тегів незалежно від метатегів із подібних причин. Для XHTML-файлів Firefox відображатиме їх відповідно, лише якщо вони будуть названі .xhtml.
alecov

@ChrisMoschini. Напевно, але використовувати application/xhtml+xml, ні text/xml.
TRiG

166

Якщо хтось цікавий, кінцевою причиною є те, що HTML спочатку був діалектом SGML, що є дивнішим старшим братом XML. У SGML-land елементи можуть бути вказані в DTD як самозакриваються (наприклад, BR, HR, INPUT), неявно закриваються (наприклад, P, LI, TD), або явно закриваються (наприклад, TABLE, DIV, SCRIPT). XML, звичайно, не має цього поняття.

Теза-суп-аналізатори, якими користуються сучасні браузери, вийшли з цієї спадщини, хоча їх модель розбору вже не є чистим SGML. І звичайно, ваш ретельно продуманий XHTML розглядається як погано написаний SGML-натхненний тег-суп, якщо ви не надсилаєте його з типом mime XML. Це також чому ...

<p><div>hello</div></p>

... браузер інтерпретується як:

<p></p><div>hello</div><p></p>

... що є рецептом чудового незрозумілого помилка, який може кинути вас на підходи, коли ви намагаєтеся кодувати проти DOM.


4
Мені цікаво. чому браузер вирішує трактувати це так?
Ахмед Еон Аксан

32
@AhmedAeonAxan: PЕлемент не може містити DIVелементів (це недійсний HTML), тому браузер неявно закриває Pелемент (визначений як "неявно закритий") перед початковим DIVтегом. Однак браузери зазвичай поводяться по-різному в цьому відношенні (як це можна зробити з будь-яким недійсним HTML).
MrWhite

5
@ColeJohnson Ні, це не тег-суп; greim замикає межу між дійсним та недійсним HTML. Суп з тегами - це те, що ви отримуєте, коли автори не піклуються про правила, оскільки браузери використовують виправлення помилок. З </p>іншого боку, відсутній кінцевий тег - це фактично частина визначення HTML!
Містер Лістер

3
@MrLister - Сортування. "Суп з тегами" описує аналіз синтаксису HTML, а не його авторство. Це термін, який використовується для опису різних стратегій браузерів, які використовуються для розуміння HTML, і не відрізняється від суворого розбору XML. Розбір XML дозволений лише для типів mime XML, але оскільки вони ніколи не досягли широкого використання, браузери перейшли до різних схем «суп з тегами», навіть для інших дійсних документів.
греїм

8
HTML5 фактично стандартизував розбір 'супу з тегів', включаючи послідовний спосіб обробки недійсної розмітки. До цього часу браузерам доводилося самостійно з'ясовувати, що робити з недійсною розміткою, що викликає невідповідності. HTML-аналізатор у поточних браузерах - один із найсучасніших програм програмного забезпечення, що коли-небудь написаний. Чудово швидко і може працювати з більшістю будь-якого введення, даючи стійкі результати.
Штійн де Вітт

161

Інші відповіли "як" і цитують спец. Ось справжня історія "чому ні <script/>" після багатьох годин копання у звітах про помилки та списках розсилки.


HTML 4

HTML 4 заснований на SGML .

SGML має деякі ярлики , наприклад <BR//,<B>text</> , <B/text/або <OL<LI>item</LI</OL>. XML приймає першу форму, визначає закінчення як ">" (SGML є гнучким), так що він стає <BR/>.

Однак HTML не переосмислюється, це <SCRIPT/> повинно означати <SCRIPT>> .
(Так, '>' має бути частиною вмісту, а тег все ще не закритий.)

Очевидно, що це несумісно з XHTML і буде розірвати багато сайтів (за часом браузери були достатньо зрілими , щоб піклуватися про це ), тому ніхто не реалізований shorttags і специфікація радить проти них .

Ефективно, усі "працюючі" теги самозакінчення - це теги із забороненим кінцевим тегом на технічно невідповідних аналізаторах і насправді є недійсними. Саме W3C придумав цей хак, щоб допомогти перейти до XHTML, зробивши його сумісним з HTML .

І <script>кінцевий тег не заборонений .

Тег "самозакінчення" - це злом у HTML 4 та безглуздий.


HTML 5

HTML5 має п'ять типів тегів, і лише теги "недійсні" та "іноземні" дозволяється самозакриватися .

Оскільки <script>він недійсний (він може мати вміст) і не є стороннім (наприклад, MathML або SVG), <script>не може бути самозакритим, незалежно від того, яким чином ви його використовуєте.

Але чому? Чи не можуть вони вважати це іноземним, робити окремі справи чи щось таке?

HTML 5 має на меті бути сумісним назад із реалізаціями HTML 4 та XHTML 1. Він не базується на SGML або XML; його синтаксис в основному стосується документування та об'єднання реалізацій. (Саме тому <br/> <hr/>тощо є дійсним HTML 5, незважаючи на те, що він недійсний HTML4.)

Самозакриття - <script>це один із тегів, в яких реалізація використовується для відмінності. Він використовується для роботи в Chrome, Safari , і Opera ; Наскільки мені відомо, він ніколи не працював в Internet Explorer або Firefox.

Про це йшлося, коли розроблявся HTML 5 та його відхиляли, оскільки він порушує сумісність браузера . Веб-сторінки, на яких тег сценарію самозакривається, можливо не відображаються правильно (якщо вони взагалі є) у старих браузерах. Були й інші пропозиції , але вони також не можуть вирішити проблему сумісності.

Після звільнення чернетки WebKit оновив аналізатор на відповідність.

Самозакриття <script>не відбувається в HTML 5 через відсталу сумісність з HTML 4 та XHTML 1.


XHTML 1 / XHTML 5

Коли він справді<script/> виконується як XHTML, він справді закритий, як говорилося в інших відповідях .

За винятком того, що специфікація говорить, що вона повинна працювати, коли вона служила як HTML:

Документи XHTML ... можуть бути позначені етикеткою типу "text / html" [RFC2854] Інтернет-медіа, оскільки вони сумісні з більшістю браузерів HTML.

Так що трапилося?

Люди попросили Mozilla , щоб дозволити Firefox розібрати , відповідні документи в XHTML , незалежно від зазначеного змісту заголовка (відомого як пирхання контенту ). Це дозволило б сценарії самозакриття, і нюхання вмісту все одно було необхідне, оскільки веб-хостери не були достатньо зрілі, щоб обслуговувати правильний заголовок; IE був у цьому хороший .

Якщо перша війна браузера не закінчилася IE 6, можливо, XHTML також був у списку. Але це все закінчилося. І в IE 6 є проблема з XHTML. Насправді IE не підтримує правильний тип MIME взагалі , змушуючи всіх використовувати text/htmlдля XHTML , тому що IE провів значну частку ринку в протягом цілого десятиліття.

А також нюхання вмісту може бути дуже поганим, і люди кажуть, що його слід припинити .

Нарешті, виявляється, що W3C не означав, що XHTML є нюхальним : документ є і HTML, і XHTML, і Content-Typeправила. Можна сказати, що вони твердо стояли на "просто слідуйте нашій специфікації" і ігноруючи те, що було практично . Помилка, яка продовжувалася в пізніших версіях XHTML.

У всякому разі, це рішення вирішило питання для Firefox. Минуло 7 років до того, як народився Chrome ; не було іншого значного браузера. Таким чином було прийнято рішення.

Вказівка ​​лише типу doctype не викликає розбору XML через наступні специфікації.


1
@AndyE Коли ви пишете самозакриваючийся <script>, основні браузери на той час не вважають, що він закритий, і він буде аналізувати html підпорядкування як javascript, внаслідок чого дійсний HTML5 зламається на цих старих браузерах. Таким чином пропозиція відхиляється. Це пояснюється у пов'язаному списку розсилки HTML5.
Sheepy

2
@AndyE: Те, що ви описуєте, - це сумісність вперед - можливість старого коду працювати з новим компілятором / інтерпретатором / аналізатором. Зворотна сумісність - це можливість нового коду працювати зі старим компілятором / інтерпретатором / аналізатором. Так, так, зворотна сумісність була проблемою, оскільки в іншому випадку сторінки, написані з новою специфікацією на увазі, не працюватимуть у старих браузерах (і так, це традиція веб-програмування намагатися максимально працювати з новим кодом у старих браузерах).
slebetman

3
@Dmitry Реальність полягає в тому, що забороняти самозакритий сценарій - це шлях в одну сторону. Як пов'язаний , закритий <script> розірве всі браузери, користувачі просто побачать порожню сторінку - ігрові приставки, інтернет-телебачення, IE 11 на новому корпоративному ПК Win7, мільйони часу Java або мільярди смартфонів. Чи можете ви оновити на більшості пристроїв більшість WebView більшості мов? Якби HTML5 спробував, що вони не змогли б, як XHTML2.
Sheepy

6
дуже занижена відповідь
Каміль Томшик

2
Трохи виправлень: теги, які, здається, працюють як самозакриті в HTML, не мають опціональні кінцеві теги, а теги із забороненими кінцевими тегами (порожні або недійсні теги). Теги з необов'язковими кінцевими тегами, як-от <p>або <li>, не можуть бути «самозакритими», оскільки вони можуть мати вміст, тому код на зразок <p/>- це не більше, ніж (неправильно сформований) стартовий тег та вміст після нього, якщо це дозволено в цьому елементі , закінчився би всередині нього.
Ілля Стрельцин

44

Internet Explorer 8 і новіші версії не підтримують XHTML-розбір. Навіть якщо ви використовуєте декларацію XML та / або доктрип XHTML, старий IE все ще аналізує документ як звичайний HTML. І в простому HTML синтаксис, що самозамикається, не підтримується. Косою косою рисою просто ігнорується, ви повинні використовувати явний тег закриття.

Навіть веб-переглядачі з підтримкою розбору XHTML, такі як IE 9 та новіших версій , все ще будуть розбирати документ як HTML, якщо ви не обслуговуєте документ із типом вмісту XML. Але в такому випадку старий IE взагалі не відображатиме документ!


9
"IE не підтримує розбір XHTML." в той час, коли це було написано, було вірним для версій IE, але більше не відповідає дійсності.
EricLaw

@EricLaw Ви можете уточнити, у якій версії IE це виправлено? (і будь-які конкретні умови - наприклад, потрібна дійсна
доктіпія

2
@scunliffe IE9 була першою версією з повною підтримкою XHTML. blogs.msdn.com/b/ie/archive/2010/11/01/…
EricLaw

28

Люди вище вже досить пояснили цю проблему, але одне, що могло б зрозуміти, це те, що, хоча люди використовують <br/>і такі весь час в HTML-документах, будь-яке /в такій позиції в основному ігнорується і використовується лише при спробі зробити дещо як розбірливий, як XML та HTML. Спробуйте <p/>foo</p>, наприклад, і ви отримаєте звичайний абзац.


22

Тег сценарію самозакриття не працюватиме, оскільки тег сценарію може містити вбудований код, а HTML недостатньо розумний, щоб увімкнути або вимкнути цю функцію на основі наявності атрибута.

З іншого боку, HTML має чудовий тег для включення посилань на зовнішні ресурси: <link>тег, і він може бути самозакритим. Він уже використовується для включення таблиць стилів, каналів RSS та Atom, канонічних URI-файлів і всіляких інших смаків. Чому б не JavaScript?

Якщо ви хочете, щоб тег сценарію був самостійно закритий, ви не можете цього зробити, як я вже сказав, але є альтернатива, хоча і не розумна. Ви можете використовувати тег посилань, що закриваються, і посилатися на ваш JavaScript, надавши йому тип тексту / javascript і відношення як сценарій, як-от нижче:

<link type="text/javascript" rel ="script" href="/path/tp/javascript" />

4
Мені це подобається, чому ж він не "розумний"?
Джош М.

5
Тому що існує заздалегідь визначений тег скрипта, щоб виконати саме роботу з завантаження сценарію. Навіщо ви плутати питання, використовуючи щось інше? Молот молотка в цвяхи .. Чи було б розумно користуватися взуттям?
Дейв Лоуренс

8
@daveL - У нас є <style>теги, але використовуйте теги посилань для зовнішніх файлів CSS. Визначення тега посилання: " Тег <link> визначає зв'язок між документом та зовнішнім ресурсом." Цілком логічним здається, що тег посилань буде використовуватися для зовнішніх CSS або JS ... саме для цього використовується ... посилання у зовнішні файли. Зауважте, я не говорю спец / крос-браузерність / тощо, я просто коментую логічну природу використання тегів посилань для залучення і CSS, і JS ... це насправді мало б багато сенсу, якби це було так . Не впевнений, що взуття [аналогія] підходить.
Джимбо Джоні

20

На відміну від XML і XHTML, HTML не має знань про синтаксис, що самозамикається. Веб-переглядачі, які інтерпретують XHTML як HTML, не знають, що /символ вказує на те, що тег повинен бути самозакритим; натомість вони інтерпретують це як порожній атрибут, і аналізатор все ще вважає тег "відкритим".

Так само, як <script defer>трактується як <script defer="defer">, <script />трактується як <script /="/">.


33
Наскільки це елегантне пояснення, воно насправді неправильне. Якби це було правдою, для елемента сценарію в DOM був би атрибут "/". Я перевірив IE, Firefox і Opera, і жодна з них насправді не містить такого атрибута.
Alohci

11
/ не є дійсним символом імені атрибуту, тому він відкидається. Інакше це пояснення досить зрозуміле.
залу, - відновити Моніку

1
Насправді, деякі парсери HTML (і особливо валідатори) можуть інтерпретувати /як частину конструкції NET (Null End Tag).
IllidanS4 хоче, щоб Моніка повернулася

18

Internet Explorer 8 і старше не підтримують правильний тип MIME для XHTML, application/xhtml+xml. Якщо ви обслуговуєте XHTML як text/html, що потрібно, щоб ці старіші версії Internet Explorer робити що-небудь, це буде інтерпретуватися як HTML 4.01. Короткий синтаксис можна використовувати лише з будь-яким елементом, який дозволяє опускати тег закриття. Див . Специфікацію HTML 4.01 .

"Коротка форма" XML інтерпретується як атрибут з ім'ям /, який (оскільки немає знака рівності) інтерпретується як маючи неявне значення "/". Це абсолютно неправильно в HTML 4.01 - незадекларовані атрибути заборонені, але браузери ігнорують його.

IE9 та пізніша підтримка XHTML 5, що постачається разом application/xhtml+xml.


IE 9 підтримує XHTML і IE вже не> 51%. Чи можете ви оновити свою відповідь?
Даміян Єрік

5

Це тому, що SCRIPT TAG не є ГОЛОВНИМ ЕЛЕМЕНТОМ.

У HTML-документі - VOID ЕЛЕМЕНТів немає потребують "закриваючого тегу"!

У xhtml все є загальним, тому всі вони потребують припинення, наприклад, "закриваючий тег"; У тому числі br, простий розрив рядка, як <br></br>або його скорочення <br /> .

Однак Елемент сценарію ніколи не є ні пустим, ні параметричним Елементом, оскільки тег сценарію перш ніж будь-що інше, є Інструкцією браузера, а не декларацією з описом даних.

В основному, інструкція про семантичне припинення, наприклад, "закриваючий тег" потрібна лише для обробки інструкцій, семантика яких не може бути закінчена наступним тегом. Наприклад:

<H1>семантика не може бути закінчена наступним, <P>оскільки вона не має достатньої кількості власної семантики для переосмислення і, таким чином, припиняє попередній набір інструкцій H1. Хоча він зможе розбити потік на новий рядок абзацу, він не "достатньо сильний", щоб змінити наявний розмір шрифту та стиль висоти рядка , що витікає вниз по потоку , що витікає , тобто витікає з Н1 (оскільки P не має його ).

Ось як і чому придумана сигналізація "/" (припинення).

Узагальнений тег завершення без опису, як тег < />, був би достатній для будь-якого падіння зіткнутого каскаду, наприклад: <H1>Title< />але це не завжди так, тому що ми також хочемо бути здатними "вкладати", багаторазове посередницьке тегування потоку: розділити в торенти перед загортанням / падінням на інший каскад. Як наслідок, загальний термінатор, такий як < />не міг би визначити ціль властивості, яку потрібно припинити. Наприклад: <b>жирний <i>жирний курсив < /> курсивом </> звичайний. Безперечно, не вдасться правильно визначити наш намір і, швидше за все, інтерпретував би це як сміливий жирний шрифт - жирний шрифт .

Так народилося поняття обгортки, т. Е. Контейнера. (Ці поняття настільки схожі, що неможливо розрізнити, а іноді один і той же елемент може мати і те й інше. <H1>Це одночасно оболонка і контейнер. В той час як <B>лише семантична обгортка). Нам знадобиться звичайний, не семантичний контейнер. І звичайно винахід Елементу DIV.

Елемент DIV - це фактично контейнер 2BR. Звичайно, прихід CSS зробив усю ситуацію більш дивною, ніж це було б інакше, і спричинив велику плутанину з багатьма великими наслідками - опосередковано!

Оскільки за допомогою CSS ви могли б легко перекрити натиснуту до і після BR поведінку нещодавно винайденого DIV, його часто називають "контейнером нічого не робити". Що, природно, неправильно! DIVs є елементами блоку і спочатку переривають лінію потоку як до, так і після закінчення сигналізації. Незабаром WEB почав страждати від сторінки DIV-itis. Більшість із них все ще є.

Прихід CSS з його можливістю повністю переосмислити і повністю переробити рідну поведінку будь-якого HTML-тегу, якось вдалося заплутати і розмити весь сенс існування HTML ...

Раптом усі HTML-теги з’явилися ніби застарілими, вони були зняті з огляду, позбавлені всього свого первісного значення, ідентичності та призначення. Якось ви створили б враження, що вони більше не потрібні. Скажімо: одного тегу-обгортки-контейнера вистачить для всіх представлених даних. Просто додайте необхідні атрибути. Чому б замість цього не було значущих тегів; Винайдіть імена тегів, коли ви йдете, і дозвольте CSS турбуватися з іншими.

Ось як народився xhtml і, звичайно, велика тупа, яку так дорого заплатили нові бажаючі та спотворене бачення того, що є що, і яка проклята мета всього цього. W3C перейшов від всесвітньої павутини до того, що пішло не так, товариші? !!

Мета HTML - передавати змістовні дані людському реципієнту.

Для надання інформації.

Формальна частина існує лише для того, щоб сприяти ясності надання інформації. xhtml не приділяє найменшої уваги інформації. - До нього інформація абсолютно не має значення.

Найголовніше в цьому питанні - це знати і вміти розуміти, що xhtml - це не просто версія якогось розширеного HTML , xhtml - це зовсім інший звір; підстави вгору; і тому розумно тримати їх окремо.


3

Різниця між "справжнім XHTML", "штучним 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!нижче textarea.

Для недієздатних браузерів ви можете скопіювати вміст текстової області та зберегти її як файл із .xhtml(або .xht) розширенням ( дякую Алеку за цей підказку ).


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.