Ошибка безопасности узла сценария вставки Chrome XSL Transformation? - PullRequest
0 голосов
/ 30 ноября 2018

AJAX загружает xml и xsl, а затем преобразует его в html.Результирующий узел импортируется в HTML-контейнер.Результат имеет элемент script со встроенным кодом JavaScript.После обновления Chrome встроенный код не будет выполнен.

Например: HTML

<!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <title></title>
        </head>
        <body>
            <script>
    let buttonElement = document.createElement("button");
        buttonElement.textContent = "Press me";
        document.body.appendChild(buttonElement);

    buttonElement.addEventListener("click", event => {
        Promise.all([fetch('/test.xml'), fetch('/test.xsl')]).then(result => {
            Promise.all([result[0].text(), result[1].text()]).then(result => {
                let parser = new DOMParser(),
                    xml = parser.parseFromString(result[0], "application/xml"),
                    xsl = parser.parseFromString(result[1], "application/xml"),
                    target = document.body,
                    processor = new XSLTProcessor(),
                    output;

                processor.importStylesheet(xsl);
                output = processor.transformToDocument(xml);

                let newOutput = document.body.appendChild(output.documentElement);
/* 
Uncomment the block below,  the result node its replacement  helps and inline script will be executed properly 
*/
/*              newOutput.querySelectorAll("script").forEach(element => {
                    let replacement = document.createElement("script");
                    replacement.text = element.text;
                    element.replaceWith(replacement);
                });         
*/
            });
        });
    }, false);
            </script>
        </body>
    </html>

XML

<?xml version="1.0" encoding="UTF-8"?>
<hello>
    <world/>
</hello>

XSL

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
    <xsl:output method="xml" indent="no"/>
    <xsl:template match="/">
        <div>
            <p>Hello world</p>
            <script>console.log("Test me!");</script>
        </div>
    </xsl:template>
</xsl:stylesheet>

Итак, это ошибка безопасности Webkit?Потому что эта ошибка была также обнаружена в Opera.

А если это решение безопасности, почему встроенный скрипт успешно выполняется после замены узла результата?

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