Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使XSLT在chrome中工作?_Xslt_Google Chrome - Fatal编程技术网

如何使XSLT在chrome中工作?

如何使XSLT在chrome中工作?,xslt,google-chrome,Xslt,Google Chrome,我有一个XML文档,它与相应的。转换由客户端执行,不使用JavaScript 这在IE(震惊恐怖)中运行良好,但在Google Chrome中,只显示文档的文本节点 我知道在Chrome中进行客户端XSL是可能的,正如我所看到的例子,但我自己还不能复制这一成功 我做错了什么?在撰写本文时,存在一个需要xmlns属性才能触发渲染的问题: <xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" ... > 这就是我从服务器提供xml

我有一个XML文档,它与相应的。转换由客户端执行,不使用JavaScript

这在IE(震惊恐怖)中运行良好,但在Google Chrome中,只显示文档的文本节点

我知道在Chrome中进行客户端XSL是可能的,正如我所看到的例子,但我自己还不能复制这一成功


我做错了什么?

在撰写本文时,存在一个需要
xmlns
属性才能触发渲染的问题:

<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" ... >

这就是我从服务器提供xml文件时遇到的问题


如果与我不同,您是从
文件查看xml文件://
url,那么提到
--允许从文件访问文件的解决方案就是您想要检查的解决方案

此站点是使用XML/XSLT客户端构建的。它适用于IE6-7-8、FF、O、Safari和Chrome。 您是否正确发送HTTP头?
您是否遵守同一原产地政策?

据我所知,Chrome正在查找标题

内容类型:text/xml

然后它就工作了——其他迭代都失败了


确保您的web服务器正在提供此功能。这也解释了为什么它不能成功file://URI xml文件。

如果xml文件(从标准PI开始:

<?xml-stylesheet type="text/xsl" href="..."?>

(用于引用XSL样式表)用作“应用程序/xml”。在这种情况下,Chrome仍将下载引用的XSL样式表,但不会呈现任何内容,因为它将默默地将文档类型从“应用程序/xml”更改为“文档”(!?)并将“文本/XSL”更改为“样式表”(!?),然后将尝试呈现xml文档,就像它是HTML(5)文档一样,不首先运行它的XSLT处理器。屏幕上根本不会显示任何内容(其内容将继续显示引用XML页面的前一页,并将继续旋转图标,就好像文档从未完全加载一样)

您完全可以使用Chrome控制台,它显示所有资源都已加载,但它们的解释不正确

因此,是的,Chrome目前只呈现XML文件(带有可选的前导XSL样式表声明),只有当它作为“text/XML”使用时,才呈现XML文件,而不是像对于带有XSL声明的客户端呈现XML那样作为“application/XML”

对于用作“text/XML”或“application/XML”且不包含XSL样式表声明的XML文件,Chrome仍应使用默认样式表将其呈现为DOM树,或至少作为其文本源。但事实并非如此,它再次尝试将其呈现为HTML,并在许多脚本上立即出现错误尝试访问“document.body”以处理onLoad事件并在其中插入一些javascript处理程序的(包括默认的内部处理程序)

在Chrome中无法按预期工作(公共Lisp文档),但在支持客户端XSLT的IE中工作的站点示例:


上面的索引页显示正确,但所有链接都将驱动到XML文档,其中包含对现有XSL样式表文档的基本XSL声明,并且您可以无限期地等待,因为您认为这些章节在下载时存在问题。阅读文档站所能做的就是打开控制台并阅读Res中的源代码ources选项卡。

下面Eric给出的另一个答案是错误的。他提到的名称空间声明与问题无关

它不起作用的真正原因是(参见)

想象一下这个场景:

  • 您收到一封来自攻击者的电子邮件,其中包含一个作为附件的网页,您可以下载该网页

  • 您可以在浏览器中打开现在的本地网页

  • 本地网页创建一个源代码为的

  • 由于您已登录Gmail,框架会将邮件加载到您的收件箱中

  • 本地网页通过使用JavaScript访问
    frames[0].document.documentElement.innerHTML
    (联机网页将无法执行此步骤,因为它来自非Gmail源;同源策略将导致读取失败。)

  • 本地网页将收件箱的内容放入
    中,并通过表单帖子将数据提交给攻击者的web服务器。现在攻击者拥有您的收件箱,这可能有助于垃圾邮件或识别盗窃行为

  • Chrome通过对使用Chrome打开的本地文件设置限制来阻止上述情况。为了克服这些限制,我们有两种解决方案:

  • 尝试运行带有标志的Chrome。我自己还没有测试过,但如果它能工作,你的系统现在也会容易受到上述场景的攻击

  • 将其上载到主机,并解决问题


  • 我在localhost上也有同样的问题。 在互联网上四处寻找答案,我同意添加
    ——允许从文件访问文件
    是有效的。我在Mac上工作,所以对我来说,我必须通过终端
    sudo/Applications/Google\Chrome.app/Contents/MacOS/Google\Chrome——允许从文件访问文件
    ,并输入密码(如果你有密码的话)


    另一件小事-除非您向.xml文件中添加对.xsl文件的引用,否则一切都将无效,如下所示
    。另一件我没有立即意识到的小事-您应该在浏览器中打开.xml文件,而不是.xsl。

    我尝试将文件放入wwwroot。因此,在Chrome中访问页面时,这是地址localhost/yourpage.xml

    Eric说的是正确的

    在xsl中,对于xsl:stylesheet标记,具有以下属性

    version=“1.0”xmlns:xsl=”http://www.w3.org/1999/XSL/Transf
    "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files
    
    open -n -a "Google Chrome" --args \
        --disable-web-security \               # This disable all CORS and other security checks
        --user-data-dir=$HOME/fakeChromeDir    # This let you to force open a new Google Chrome session