【问题标题】:Javascript/XSL which works in Firefox does nothing Safari在 Firefox 中工作的 Javascript/XSL 什么都不做 Safari
【发布时间】:2011-10-08 00:45:52
【问题描述】:

我这里有一些非常基本的 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。但为什么?我只是为 Safari 使用了错误的标准 Javascript。仅供参考,这是针对在 Mobile Safari 中工作的。

我没有包含 XML 和 XSL 文件,因为它们是专有的,并且它们在其他浏览器中确实可以正常工作。此外,错误来自 Javascript 控制台。

错误:

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

我认为这意味着“加载”是未定义的。这是正确的,如果是,我该怎么办?我敢肯定,AJAX 确实可以在 Safari 中使用!

谢谢,

马特。

【问题讨论】:

    标签: javascript html xml xslt safari


    【解决方案1】:

    Mozilla 在 XML DOM 文档上支持 load 方法,我认为 WebKit 不支持。因此,要为 Safari 加载 XML 文档,您应该考虑使用 XMLHttpRequest,然后在成功请求后,您可以使用 responseXML 属性。所以你需要创建两个 XMLHttpRequest,一个用于 XML 文档,另一个用于样式表,然后你有两个 responseXML 文档,将一个用于样式表传递给 importStylesheet 方法,另一个传递给你使用的转换方法。

    我还建议使用 transformToFragment(xml, document) 而不是序列化转换结果,然后通过设置 innerHTML 再次对其进行解析。

    【讨论】:

    • 谢谢。请问有资源链接吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2010-11-13
    相关资源
    最近更新 更多