Задача кажется довольно простой: как включить файл Javascript в xml-документ, чтобы хотя бы Opera и Firefox могли его проанализировать и выполнить код?
Голосование против, потому что я считаю, что вы путаете причину и следствие: тот факт, что браузеры могут отображать XML, не означает, что они будут интерпретировать его так же, как интерпретируют HTML. И лично я считаю, что директива xml-stylesheet была плохой идеей.
Проголосовал, потому что вопрос кажется мне довольно ясным, и @Ady дал на него хороший ответ.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Функция, которая должна вам помочь, - это функция eval (). Эта функция будет оценивать любую переданную вами строку как Javascript.
Кроме того, можно анализировать XML в Javascript. Просто погуглите "javascript xml parser".
Объедините эти две идеи, и вы отправитесь в путь.
Если вы просто хотите поместить javascript в файл XML:
<xml> <js script = "1"> вот какой-то javascript; вот еще javascript; </js> <js script = "2"> вот еще больше javascript; jere - это еще больше javascript; </js> </xml>
Пожалуйста, прочтите вопрос еще раз. Я не спрашивал, как разбирать javascript из javascript или xml из javascript.
Разумный ответ, учитывая низкое качество исходного вопроса.
<js script = "file.js" /> не выполняется браузером.
Хорошо, позвольте мне попробовать это так: я хочу, чтобы Firefox загрузил xml-файл, затем проанализировал связанный с ним файл javascript и выполнил его код.
Если я понимаю, вы хотите, чтобы XML-документ запускал javascript при просмотре в браузере?
Это не является частью стандарта XML и, как таковое, не будет поддерживаться до тех пор, пока не будет (я предполагаю, что это никогда не будет поддерживаться, потому что XML предназначен не для отображения, а для данных). Если вы говорите о XHTML, то это другое дело.
-
Обновлено: просто чтобы уточнить мой ответ.
XML никогда не предназначался для отображения разметки, как HTML, поэтому был разработан XHTML (HTML, соответствующий стандартам XML). Браузеры созданы для определенной интерпретации XHTML, но XML - это просто необработанные данные.
Если вы хотите, чтобы ваш XML запускал такие дополнения, как JavaScript, вам следует рассмотреть возможность использования XSLT для преобразования вашего XML в XHTML и, следовательно, воспользоваться возможностями браузеров.
Да, вы меня правильно поняли, я говорю о xml, а не о xhtml. И меня не волнуют стандарты, а только реальные возможности браузера. Они поддерживают <? Xml-stylesheet type = "text / css" href = "style.css"?>, Я подумал, что что-то подобное должно быть и для Javascript.
Я думаю, вам нужно подумать, для чего был предназначен XML. Вы можете использовать XSLT для преобразования XML в XHTML и, прежде всего, открыть страницу как HTML-документ со всем javascript, который вы хотите запустить.
xhtml - это просто частный случай xml. Что же делает xml плохим для работы с javascript? Теоретически js не имеет ничего общего с тем, для чего был разработан xml, я не вижу никакого соединения и не вижу причин ограничивать запуск js для xml-документа.
@snitko - главное, чтобы ни один браузер не воспринимал это как разметку дисплея, и чтобы получить что-то базовое, например, работу событий, вам нужно было бы определить столько расширений, что вы также можете использовать xhtml, который уже легко определяет эти вещи
Встраивайте XML и Javascript в документ XHTML, а затем используйте обширные и хорошо документированные возможности динамического HTML.
Вы получите что-то гораздо быстрее, чем вы, рассуждая о том, что, поскольку некоторые браузеры реализуют слабые и плохо документированные стили CSS для XML-документов, поэтому они должны поддерживать выполнение Javascript, встроенного в XML, как если бы было какое-либо соединение. между этими двумя идеями.
Добавьте сценарий, указывающий пространство имен 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/
@ user4815100 Здесь сказано: «В этом теге и его потомках пространство имен xhtml означает пространство имен "http://www.w3.org/1999/xhtml"». По сути, он позволяет включать элементы XHTML в любой XML-документ.
<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.
могу подтвердить, что xmlns - это решение :) отличный ответ! Работает в Chrome! Хотя мне кажется странным, что он может запускать getElementById / querySelectorAll, поскольку он не находится в правильном пространстве имен, и моя схема может использовать разные атрибуты для их обозначения.
Я сделал это:
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>
Аналогично описанному выше, но это может привести к ошибке, потому что части <![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'>
// <![CDATA[
</xsl:text>
<xsl:copy-of select='./text()' />
<xsl:text disable-output-escaping='yes'>
//]]>
</xsl:text>
</script>
</xsl:when>
...
Прогулка по кускам ...
<script>.<script> для вывода.xsl:for-each.// <![CDATA[. // отображает оставшуюся часть строки как комментарий и, таким образом, предотвращает ошибку JS.<script>. ПРИМЕЧАНИЕ. Вы должны предварительно ввести новую строку (как указано выше или каким-либо другим способом), чтобы закомментированная строка до нее не попала в ту же строку, что и эта. Очевидно, что если это так, он закомментирует и эту строку. Сохранение одного за другим не обязательно, но оно сохраняет эстетику двух совпадающих тегов CDATA.// ]]>. На этом заканчивается блок CDATA, и снова маркировка CDATA игнорируется браузером при чтении JS.</script>.xsl:choose, закройте xsl:when.Только шаги 2, 3, 5 и 7 фактически копируют блок скрипта. Остальное - это работа, чтобы заставить его работать.
Преобразование такого блока, как ...
...
<script type='javascript'>alert('Hello World!');</script>
...
Затем становится,
...
<script type='javascript'>
// <![CDATA[
alert('Hello World!');
// ]]>
</script>
Эффективно сохраняется и читается как в XML, так и в браузере.
Сфера того, что вы пытаетесь достичь, нуждается в расширении, отредактируйте вопрос, чтобы добавить больше деталей