如何让XSLT在chrome中运行?

时间:2010-06-05 18:25:04

标签: xslt google-chrome

我有一个XML文档here,该文档与相应的XSL file一起提供。转换留待客户端执行,无需JavaScript。

这在IE(冲击恐怖)中运行良好,但在谷歌浏览器中,只显示文档的文本节点。

我知道可以在Chrome中使用客户端XSL,因为我已经看过它的例子,但我还是能够自己复制这个成功

我做错了什么?

11 个答案:

答案 0 :(得分:112)

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

它不起作用的真正原因是due to security concerns(参见issue 4197issue 111905)。

想象一下这种情况:

  1. 您收到来自攻击者的电子邮件,其中包含您下载的网页作为附件。

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

  3. 本地网页会创建一个<iframe>,其来源为https://mail.google.com/mail/

  4. 由于您已登录Gmail,因此相框会在收件箱中加载消息。

  5. 本地网页使用JavaScript访问frames[0].document.documentElement.innerHTML来读取框架内容。 (在线网页无法执行此步骤,因为它来自非Gmail来源;同源策略会导致读取失败。)

  6. 本地网页将收件箱的内容放入<textarea>,并通过表单POST将数据提交给攻击者的Web服务器。现在攻击者拥有您的收件箱,这可能对发送垃圾邮件或识别盗窃有用。

  7. Chrome通过使用Chrome打开对本地文件设置限制来弥补上述情况。为了克服这些限制,我们有两个解决方案:

    1. 尝试使用--allow-file-access-from-files标记运行Chrome。我自己没有对此进行测试,但如果它有效,您的系统现在也会受到上述情况的影响。

    2. 将其上传到主机,问题解决了。

答案 1 :(得分:14)

在撰写本文时,有一个bug in chrome需要xmlns属性才能触发渲染:

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

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


如果与我不同,您正在从file:///网址查看xml文件,那么提及--allow-file-access-from-files的解决方案就是您想要的

答案 2 :(得分:5)

我在localhost上遇到了同样的问题。 在互联网上运行寻找答案,我同意添加--allow-file-access-from-files有效。我在Mac上工作,所以对我来说,我必须通过终端sudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files并输入您的密码(如果有的话)。

另一个小问题 - 除非您将.xsl文件的引用添加到.xsl文件中,否则任何内容都不会起作用,如下所示<?xml-stylesheet type="text/xsl" href="<path to file>"?>。我没有立即意识到的另一件小事 - 您应该在浏览器中打开.xml文件,而不是.xsl。

答案 3 :(得分:4)

基于 Chrome 的问题与 xml名称空间无关,即xmlns="http://www.w3.org/1999/xhtml"。如果没有namesspace属性,它也不会使用IE。

由于安全限制,您必须在启动Chrome时添加--allow-file-access-from-files标记。我认为linux / * nix用户可以通过终端轻松完成,但对于Windows用户,您必须打开 Chrome快捷方式属性并将其添加到目标目标中如下;

右键单击 - &gt;属性 - &gt;目标

enter image description here

以下是我在机器上使用的标记的示例完整路径;

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files

我希望逐步显示这个问题会帮助Windows用户解决问题,这就是我添加此帖子的原因。

答案 4 :(得分:3)

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

),它就不起作用
<?xml-stylesheet type="text/xsl" href="..."?>

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

您可以完美地使用Chrome控制台,该控制台显示所有资源都已加载,但却被错误解释。

所以,是的,Chrome目前只呈现XML文件(带有可选的领先XSL样式表声明),只有当它被用作“text / xml”时,而不是像应用程序/ xml那样用于客户端呈现带有XSL声明的XML。

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

Chrome中没有按预期工作的网站示例(Common Lisp文档),但在IE中支持客户端XSLT:

http://common-lisp.net/project/bknr/static/lmman/toc.html

上面的索引页面显示正确,但是所有链接都将使用基本XSL声明驱动到现有XSL样式表文档的XML文档,您可以无限期地等待,认为这些章节有下载问题。您只需打开控制台并阅读“资源”选项卡中的源代码,即可阅读docuemntation。

答案 5 :(得分:2)

尽我所知,Chrome正在寻找标题

Content-Type:text / xml

然后它工作---其他迭代失败。

确保您的网络服务器提供此功能。它还解释了为什么它失败了file:// URI xml文件。

答案 6 :(得分:1)

检查http://www.aranedabienesraices.com.ar

此站点使用XML / XSLT客户端构建。它适用于IE6-7-8,FF,O,Safari和Chrome。 您是否正确发送HTTP标头? 您是否尊重同源政策?

答案 7 :(得分:0)

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

答案 8 :(得分:0)

Eric说的是正确的。

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

version =“1.0”xmlns:xsl =“http://www.w3.org/1999/XSL/Transform” 的xmlns = “http://www.w3.org/1999/xhtml”

它在chrome中运行良好。

答案 9 :(得分:0)

我开始对此进行测试,并遇到了本地文件/ Chrome安全问题。一个非常简单的解决方法是将XML和XSL文件放在Dropbox公共文件夹中,并获取这两个文件的链接。将链接放在XML头中的XSL转换中。使用Chrome和IT工作中的XML链接!

答案 10 :(得分:0)

8年后,情况有所改变。

如果没有其他参数,我将无法打开Goog​​le Chrome的新会话,并允许使用“文件:”架构。

在macOS上,我这样做:

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

没有此参数,我无法在本地测试XSL样式表。