Можно ли создать HTML-квин? - PullRequest
13 голосов
/ 06 декабря 2011

В заголовке возможно ли создать (нетривиально) квин в HTML?

Мое определение HTML-квин:

Нетривиальная HTML-квина - это не пустая строка, в которой используется хотя бы один тег HTML, при условии, что некоторая строка в файле HTML отображается браузером как простой текст.HTML-квиня определяется так, что вывод q.html , отображаемый стандартным браузером , представляет собой содержимое q.html.

(я открыт длялюбые комментарии к этому определению, я вроде как взломал его прямо сейчас)

HTML не является полным по Тьюрингу, поэтому теорема о неподвижной точке не может быть применена, чтобы доказать, что это действительно возможно.* Однако это не обязательно означает, что HTML-квайн невозможен.Или же на самом деле можно доказать, что HTML-квайн невозможен?

Ответы [ 3 ]

16 голосов
/ 09 октября 2012

Это, конечно, невозможно с «простым» HTML. Очевидно, что это было бы возможно сделать с JavaScript, но это также возможно с CSS:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>This is the title</title>
<style type="text/css"><![CDATA[ 
* {
  display:inline;
  white-space:pre;
}
html:last-child {
  white-space:normal;
}
html:before  {content:'<html xmlns="http://www.w3.org/1999/xhtml">';}
html:after   {content:'</html>';}
head:before  {content:'<head>';}
head:after   {content:'</head>';}
title:before {content:'<title>';}
title:after  {content:'</title>';}
style:before {content:'<style type="text/css"><![CDATA[';}
style:after  {content:']]\00003e</style>';}
body:before  {content:'<body/>';position:absolute;left:0;}
]]></style>
</head>
<body/>
</html>
0 голосов
/ 06 апреля 2012

Конечно, так же, как и со всем HTML «что если», ответом будет просто использование JQuery!

0 голосов
/ 15 декабря 2011

Это невозможно. Поскольку каждый неэкранированный элемент будет интерпретироваться браузером как разметка, браузер попытается отобразить или обработать содержимое этих элементов или элемент управления. Вы не можете отобразить элемент, который не экранирован каким-либо образом, например, с тегом <pre>. Но тогда такие теги также не будут отображаться.

Конечно, вы можете использовать его как text / plain с соответствующими заголовками HTTP, но тогда это не HTML. Простое использование расширения .html заставит браузеры отображать его как html в любом случае (все?).

...