Как включить Javascript в xml-документ? - PullRequest
18 голосов
/ 21 декабря 2008

Задача кажется довольно простой: как включить файл Javascript в xml-документ, чтобы хотя бы Opera и Firefox могли его действительно проанализировать и выполнить код?

Ответы [ 7 ]

21 голосов
/ 20 сентября 2009

Добавьте скрипт с указанием пространства имен XHTML, он будет работать просто отлично.

<xhtml:script xmlns:xhtml="http://www.w3.org/1999/xhtml"
                src="file.js"
                type="application/javascript"/>

Смотрите также http://www.ibm.com/developerworks/xml/library/x-ffox3/

10 голосов
/ 21 декабря 2008

Если я вас получу, вы хотите, чтобы документ XML запускал JavaScript при просмотре в браузере?

Это не является частью стандарта XML, и поэтому не будет поддерживаться до тех пор, пока не будет (я предполагаю, что это никогда не будет поддерживаться, поскольку XML предназначен не для отображения, а для данных). Если вы говорите о XHTML, то это другое дело.

-

Изменить: просто чтобы уточнить мой ответ.

XML никогда не предназначался для отображения разметки, как HTML, поэтому был разработан XHTML (HTML, соответствующий стандартам XML). Браузеры были созданы для интерпретации XHTML определенным образом, но XML - это просто необработанные данные.

Если вы хотите, чтобы в вашем XML запускались такие дополнения, как JavaScript, вам следует рассмотреть возможность использования XSLT для преобразования вашего XML в XHTML и, следовательно, использования возможностей браузера.

7 голосов
/ 07 мая 2013
<script xmlns="http://www.w3.org/1999/xhtml"><![CDATA[
alert('Hello');
]]></script>

Или для внешнего JavaScript:

<script xmlns="http://www.w3.org/1999/xhtml" src="external.js"></script>

Работает в Firefox и Opera.

2 голосов
/ 05 июня 2013

Я сделал это:

XSLT:

<xsl:value-of select="/label[@id='MyScript']/text()" disable-output-escaping="yes"/>

XML:

<label id="MyScript"><![CDATA[
<script type="text/javascript">
alert("Hello world");
</script>
]]></label>
0 голосов
/ 12 июля 2016

Аналогично вышеописанному, но это может привести к ошибке, поскольку части <![CDATA[ и ]]> не являются допустимым кодом. Если вы помещаете его в сценарий XSL, вы также можете поставить отметку комментария JS перед этими начальными и конечными элементами.

Я также использовал элемент xsl:text для вывода части <![CDATA[. Эта часть может быть немного обманом, но приводит к в правильно сформированном XML. Пример из блока xsl:choose может быть ...

...
<xsl:when test='name()="script"'>
  <script>
    <xsl:for-each select='@*'><xsl:copy-of select='.' /></xsl:for-each>
    <xsl:text disable-output-escaping='yes'>
// &lt;![CDATA[
  </xsl:text>
  <xsl:copy-of select='./text()' />
  <xsl:text disable-output-escaping='yes'>
//]]&gt;
  </xsl:text>
  </script>
</xsl:when>
...

Прогуливаясь по кусочкам ...

  1. Обнаружение элемента <script>.
  2. Копировать тег <script> для вывода.
  3. Обязательно сохраняйте атрибуты тега в выводе с помощью быстрой строки xsl:for-each.
  4. Вывести не экранированный текст: // <![CDATA[. // отображает оставшуюся часть строки как комментарий и, таким образом, предотвращает ошибку JS.
  5. Скопируйте текстовое содержимое тега <script>. ПРИМЕЧАНИЕ. Вы должны предварительно сохранить новую строку (как выше или каким-либо другим способом), чтобы закомментированная строка, прежде чем она не оказалась в той же строке, что и эта. Очевидно, что если он это сделает, он также закомментирует эту строку. Сохранение одного после не является обязательным, но сохраняет эстетику двух соответствующих тегов CDATA.
  6. Вывод не экранированного текста: // ]]>. Это завершает блок CDATA, и снова, маркировка CDATA игнорируется браузером при чтении JS.
  7. Закройте блок с тегом </script>, конечно.
  8. И, если вы используете его в xsl:choose блоке, закройте тогда xsl:when.

Только шаги 2, 3, 5 и 7 фактически копируют блок скрипта. Остальное занято, чтобы заставить его работать.

Преобразование блока, например ...

...
<script type='javascript'>alert('Hello World!');</script>
...

Тогда становится,

...
<script type='javascript'>
// <![CDATA[
alert('Hello World!');
// ]]>
</script>

Эффективно сохраняется и читается как XML, так и браузером.

0 голосов
/ 22 декабря 2008

Внедрите XML и Javascript в документ XHTML, а затем используйте обширные и хорошо документированные возможности динамического HTML.

Вы начнете работать и работать намного быстрее, чем вы, рассуждая, что, поскольку некоторые браузеры реализуют слабый и плохо документированный стиль CSS XML-документов, поэтому они должны поддерживать выполнение Javascript, встроенного в XML, как будто любая связь между этими двумя идеями.

0 голосов
/ 21 декабря 2008

Функция, которая должна вам помочь, - это функция eval (). Эта функция оценивает любую строку, которую вы передаете ей как Javascript.

Также возможно анализировать XML в Javascript. Просто погуглите "javascript xml parser".

Объедините эти две идеи, и вы уже в пути.


Если вы просто хотите поместить javascript в файл XML:

вот немного JavaScript; здесь больше javascript; здесь еще больше javascript; Джере еще больше JavaScript;

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