Какой тег можно использовать для хранения информации в заголовке документа XHTML, которая игнорируется браузерами? - PullRequest
3 голосов
/ 12 августа 2011

Мне нужно хранить некоторые произвольные данные XML в элементе XHTML HEAD, которые будут игнорироваться браузерами. Немного похоже на элементную версию механизма data- * для создания ваших собственных атрибутов. Есть ли совместимый со стандартами способ сделать это?

edit: Некоторые люди спрашивали, почему я хотел бы сделать это. По сути, я создаю сервис, который обрабатывает веб-страницы, и я хочу, чтобы создатель веб-страницы мог передавать необязательные «подсказки» этому сервису, чтобы сообщить ему, как анализировать страницу. Я еще точно не решил, какие будут подсказки, поэтому я хочу сохранить их достаточно гибкими.

Мой код уже использует библиотеку Java JSoup для синтаксического анализа XHTML, поэтому я подумал, что было бы неплохо, если бы одна и та же библиотека могла анализировать информацию "подсказки" вместо необходимости разбирать ее отдельно.

Ответы [ 4 ]

0 голосов
/ 12 августа 2011

https://developer.mozilla.org/en/Using_XML_Data_Islands_in_Mozilla

Internet Explorer имеет функцию " Острова данных XML ", которая позволяет веб-авторам включать данные XML, встроенные в документы HTML, с помощью тега <xml>.Эта функция не основана на веб-стандартах разных поставщиков и не поддерживается в Firefox (или других браузерах, отличных от IE).Однако HTML5 имеет более общую функцию, называемую «блоки данных», которая может переносить практически любые текстовые данные, включая XML.

A <script>, когда он не имеет атрибута src и имеет атрибут типа, который не имеетопределить тип исполняемого скрипта.Содержимое элемента <script> является тогда блоком данных, который может использовать JavaScript.При помещении XML в блок данных необходимо убедиться, что встраиваемый XML-контент не имеет конечного тега, который не зависит от регистра "</script>".

Например, простая покупка XMLпорядок может быть встроен следующим образом:

<script id="purchase-order" type="application/xml">
<purchaseOrder xmlns="http://example.mozilla.org/PurchaseOrderML">
  <lineItem>
    <name>Line Item 1</name>
    <price>1.25</price>
  </lineItem>
  <lineItem>
    <name>Line Item 2</name>
    <price>2.48</price>
  </lineItem>
</purchaseOrder>
</script>

Исходный текст XML можно затем получить следующим образом:

var orderSource = document.getElementById("purchase-order").textContent;

XMLисходный текст можно проанализировать в дереве DOM с помощью API DOMParser:

var parser = new DOMParser();
var doc = parser.parseFromString(orderSource, "application/xml");

Показанный здесь способ на основе блоков данных HTML5 работает в Firefox, в Opera, в браузерах на основе WebKit.такие как Chrome и Safari, а также в IE9, тогда как островки данных XML в IE работают только в IE.

0 голосов
/ 12 августа 2011

Я нашел следующую статью об очень оригинальной идее хранения данных в комментариях HTML, которые игнорируются всеми браузерами.Это на русском языке, но Google Translate поможет вам :).
http://www.manhunter.ru/webmaster/322_ispolzovanie_html_kommentariev_dlya_hraneniya_dannih.html

0 голосов
/ 12 августа 2011

Вы пытались поместить информацию в метаэлемент? Например, вы можете попробовать это:

<meta name="blammy" content="&lt;blah blam=&quot;my&quot;&gt;">

Редактировать Проверьте эту статью на Dev Opera . Пункт 13 (прокрутите вниз на странице) решает эту проблему.

0 голосов
/ 12 августа 2011

Существует несколько возможных методов:

1 - Хранить простую информацию в элементе <meta>

<meta name="yourApp-NamedElement" content="simple_info" />

Я не уверен, какая максимальная длинаполе содержимого может быть.Теоретически вы можете поместить все свои XML-данные в один метаэлемент.Но затем вам нужно будет декодировать символы и затем проанализировать их как XML:

<meta name="yourApp-Config" content="&lt;xml&gt;&lt;config&gt;&lt;user&gt;123&lt;/user&gt;&lt;foo&gt;bar&lt;/foo&gt;&lt;/config&gt;&lt;/xml&gt;" />

2 - Использование CDATA в блоке <script>

<script type="text">
//<![CDATA[
    <arbitrary>
        <markup>blahblah</markup>
    </arbitrary>
//]]>
</script>

CDATA используется для определения того, что при разборе документа имеются произвольные символьные данные .

3 - Использование блока <object> с <params>

<object classid="foobar">
    <param name="something" value="something's value" />
    <object classid="foobarA">
        <param name="foobar2sbaseparam" value="blahblahlbah" />
        <object classid="foobarA1">
            <param name="sortofnested" value="startstogetunwieldy" />
            <param name="a123" value="barbar" />
        </object>
    </object>
</object>

Мне не нравится это решение, но, тем не менее, объекты разрешены в строгом XHTML и могут быть вложены друг в друга (<params> не может быть вложенным).

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

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