Javascript / XSL, который работает в Firefox, ничего не делает Safari - PullRequest
0 голосов
/ 07 октября 2011

У меня есть довольно простой Javascript, который прекрасно работает в Firefox, но при рендеринге в Safari ничего не делает.

<html>
<head>
    <script type="text/javascript">
        function XsltTransform(xmlfile, xslfile) {
            var xml = document.implementation.createDocument("", "", null);
            var xslt = document.implementation.createDocument("", "", null);

            xml.async = false;
            xslt.async = false;

            xml.load(xmlfile);
            xslt.load(xslfile);

            var processor = new XSLTProcessor();
            processor.importStylesheet(xslt);

            var XmlDom = processor.transformToDocument(xml)

            var serializer = new XMLSerializer();
            var output = serializer.serializeToString(XmlDom.documentElement);

            var outputDiv = document.getElementById("contentbody");
            outputDiv.innerHTML = output;
        }
    </script>
</head>
<body>
    <div id="main">
        <div id="menu">
            <div id="categorytitle">
                Categories</div>
            <ul id="categorybody">
                <li><a href="javascript:void(0)" onclick="XsltTransform('category.xml','category.xslt');">Latest news</a></li>
            </ul>
        </div>
        <div id="content">
            <div id="contenttitle">
                Content</div>
            <div id="contentbody">
                Body
            </div>
        </div>
    </div>
</body>
</html>

Ошибка javascript говорит о том, что вызов onclick вызывает неизвестную функцию: XsltTransform. Но почему? Я просто использую неправильный стандартный Javascript для Safari. К вашему сведению, это нацелено на работу в Mobile Safari.

Я не включал файлы XML и XSL, потому что они проприетарные и действительно отлично работают в других браузерах. Также ошибка исходит из консоли Javascript.

Ошибка:

TypeError: 'undefined' is not a function (evaluating 'xml.load(xmlfile)')

Я предполагаю, что это означает, что «нагрузка» не определена. Это правильно и если да, что мне с этим делать? AJAX, я уверен, работает в Safari!

Спасибо

Мт.

1 Ответ

1 голос
/ 07 октября 2011

Mozilla поддерживает метод load в документах XML DOM, я думаю, что WebKit не поддерживает. Таким образом, чтобы загрузить XML-документ для Safari, вы должны использовать XMLHttpRequest, а затем после успешного запроса вы можете использовать свойство responseXML. Таким образом, вам нужно сделать два XMLHttpRequests, один для документа XML, другой для таблицы стилей, затем у вас есть два документа responseXML, передать один для таблицы стилей в метод importStylesheet, а другой - в используемый вами метод преобразования.

Я бы также предложил использовать transformToFragment (xml, document) вместо сериализации результата преобразования, чтобы затем проанализировать его снова, установив innerHTML.

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