【问题标题】:XSLT breaks jQuery/Prototype Script in FirefoxXSLT 在 Firefox 中破坏 jQuery/Prototype 脚本
【发布时间】:2011-04-02 07:28:01
【问题描述】:

我正在做一个学校项目。这是一个带有 XML / XSLT 的互联网页面。 对于设计,我们考虑了背景中的图像褪色效果。

如您所见,我制作了它,它在 IE7 上完美运行。但是在 FF 3.6 中检查它会在 firebug 中引发一些可疑的错误并且不起作用。

例如:

alert($('menu_bg').innerHTML);  

与文档就绪/观察一起使用时有效。但这些都不起作用:

$('#menu_dots').append("content"); // jQuery
$('menu_dots').insert("content");  // prototype

关键是,我不明白为什么在两种浏览器中都可以在没有 XSLT 的情况下正常工作。但是当我对 XSLT 做同样的事情时,它会在 FF 中中断。

http://nak.erline.eu/index.xml

同域/js/_script.js

我认为问题是基于 jQuery 的,这就是我开始将其转换为原型的原因。中途我意识到,问题仍然存在。这就是为什么代码仍然使用 jQuery(注释)和 Prototype。

你有什么想法吗?

【问题讨论】:

    标签: jquery firefox prototypejs xslt


    【解决方案1】:

    在您的 XSLT 文件更改的顶部:

    <xsl:output method="xml" indent="yes" 
        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
        doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
    

    <xsl:output method="html" indent="yes" 
        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
        doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
    

    请注意,输出方法类型应为 html 而不是 xml。这解决了我测试中的问题。

    我在这里找到了答案的提示:Why does my simple strict XHTML file give errors when I include jquery?

    同样在我的测试中,我删除了以下脚本引用

    <script src="src/scriptaculous.js" type="text/javascript"/>
    <script type="text/javascript" src="js/_script.js"/>
    

    并添加了对 jQuery 的引用

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
    

    并使用您的 jQuery 代码 sn-p 进行测试。

    <script>
        $(document).ready(function(){
            $('#menu_dots').append("content");
        });
    </script>
    

    【讨论】:

    • +1 投票,因为我认为这是一个比我更好的答案:)
    • 嘿,谢谢!得到答案,它就可以了。但是,我们必须通过从 firebug 中取出 html 代码来验证 XSLT 生成的代码。问题是,当我将输出方法更改为 HTML 时,它会破坏 xhtml 结构,例如: method: html : method: xml : 因为我们使用 w3.org/1999/xhtml" 验证器需要 xml 语法。我可以在没有 xmlns="w3.org/1999/xhtml" 的情况下做到这一点,但是错误是:没有文档类型声明;暗示“”,因为 firebug 没有提前打印 doctype。
    • 有趣的是,我不知道 XSLT 会改变您提供的结构。如果我在我的 .xslt 文档中键入“”,我希望得到准确的语法(加上我注入到文档中的任何 XML)。此外,Firebug 可能正在更改呈现的文本,以便很好地适应它的 DOM 解析器(树视图)???但是,您又说它根据“方法”而变化。所以我不确定,但如果我发现任何关于该主题的内容,我会发布后续消息。
    • 这正是我对 xsl 文档的期望。但它会从所有标签中删除 /。
    • 如果您明确声明所有标签会发生什么? &lt;img src=""&gt;&lt;/img&gt;
    【解决方案2】:

    如果您必须使用 XSLT、HTML DOM、XML 和跨浏览器功能,我强烈推荐 Sarissa。这将使使用 Microsoft 硬且不兼容的 ActiveX DOM 和所有其他基于 W3C 的 DOM 变得更加容易。

    您(可能,不一定)面临的问题是生成的 DOM 对象不属于同一来源的 XML 文档,这是默认的 DOM 行为。结果,jQuery 或 Prototype 无法找到新元素。一种解决方法是将它们作为文本插入并重新解析它们,但这很昂贵。还有其他解决方法,但最简单的可能是看看 Sarissa 并学习使用它。这并不难,并且使您的代码更具可读性。您会发现 Sarissa 会处理这些和其他细微的问题,因此您可以担心更重要的事情..

    【讨论】:

    • 嗨,阿贝尔,谢谢您的回答。我明白你的意思了。但关键是,即使没有启用 javascript,页面也必须工作。 (当然没有动画等)。看起来 Sarissa 解析了 xml 和 xsl 文件。但它必须是不引人注目的。此外,jQuery 和 Prototype 能够查找和访问元素。只是无法编辑它们。
    • 好吧,这是一个简单的事实:如果没有启用 JavaScript,就不能使用 XSLT、jQuery 或 Prototype。听起来您在 XML 之上使用 PI(处理指令)来通过 XSLT 处理 XML?如果是这种情况,请再想一想,因为不幸的是,这只会给您带来麻烦。 &lt;?xml-stylesheet 的实现在浏览器之间有很大不同,您的页面不会被搜索引擎正确索引,脚本只能勉强发挥作用。但也许我错了,这不是实现它的方式吗?在这种情况下:没有 JavaScript,它无论如何都不会工作。
    • 谢谢 :) 我使用 XSLT 是因为我们必须使用它来获得更好的标记。我们项目中的 XSLT 用于模板功能。此外,我想通过给它一些动画来给页面加分。但正如我所说,页面应该在没有 JS 的情况下工作。重要的是,它在 IE+7 和 FF +3.2 上给人的感觉是一样的。
    • @Erkan:抱歉,我没有注意到您页面上的链接,也没有看到您是如何实现它的。您当前对 XSLT 的使用确实非常困难,并且会给您带来很多麻烦。但如果你必须...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多