Eri*_*ric 82 xslt google-chrome
我这里有一个XML文档,它与相应的XSL文件一起提供.转换留给客户端执行,没有JavaScript.
这在IE(冲击恐怖)中运行良好,但在谷歌浏览器中,只显示文档的文本节点.
我知道可以在Chrome中进行客户端XSL,因为我已经看过它的例子,但我还是能够自己复制这个成功
我究竟做错了什么?
Pac*_*ier 113
埃里克的另一个答案是错误的.他提到的名称空间声明与问题无关.
它不起作用的真正原因是出于安全考虑(参见问题4197,问题111905).
想象一下这种情况:
您收到来自攻击者的电子邮件,其中包含您下载的附件网页.
您可以在浏览器中打开现在本地的网页.
本地网页<iframe>的源代码为https://mail.google.com/mail/.
由于您已登录Gmail,因此框架会在收件箱中加载邮件.
本地网页使用JavaScript访问来读取框架的内容frames[0].document.documentElement.innerHTML.(在线网页无法执行此步骤,因为它来自非Gmail来源;同源策略会导致读取失败.)
本地网页将收件箱的内容放入a <textarea>并通过表单POST将数据提交给攻击者的Web服务器.现在,攻击者拥有您的收件箱,这可能对垃圾邮件或识别盗窃有用.
Chrome通过限制使用Chrome打开的本地文件来阻止上述情况.为了克服这些限制,我们有两个解决方案:
尝试使用--allow-file-access-from-files 旗帜运行Chrome .我自己没有对此进行过测试,但如果它能够正常工作,那么您的系统现在也容易受到上述类型的影响.
将其上传到主机,问题解决了.
Eri*_*ric 14
在撰写本文时,chrome中存在一个错误,需要一个xmlns属性才能触发渲染:
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" ... >
Run Code Online (Sandbox Code Playgroud)
这是我从服务器提供xml文件时遇到的问题.
如果不像我,您正在从file:///URL查看xml文件,那么提到的解决方案--allow-file-access-from-files就是您想要的
基于问题的Chrome并非是对XML命名空间是xmlns="http://www.w3.org/1999/xhtml"。如果没有命名空间属性,它也不能与 IE 一起使用。
由于安全限制,您必须--allow-file-access-from-files在启动 chrome 时添加标志。我认为Linux的/ * nix的用户可以通过终端,但对于Windows用户做到这一点很容易,你必须打开属性中的Chrome浏览器快捷方式,并在目标位置,如下添加它;
右键单击 -> 属性 -> 目标
这是我在我的机器上使用的标志的示例完整路径;
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files
Run Code Online (Sandbox Code Playgroud)
我希望逐步展示这将帮助 Windows 用户解决问题,这就是我添加这篇文章的原因。
好吧,如果 XML 文件(从标准 PI 开始:
<?xml-stylesheet type="text/xsl" href="..."?>
Run Code Online (Sandbox Code Playgroud)
用于引用 XSL 样式表)作为“application/xml”。在这种情况下,Chrome 仍会下载引用的 XSL 样式表,但不会呈现任何内容,因为它会默默地将文档类型从“application/xml”更改为“Document”(!??)并将“text/xsl”更改为“样式表”(!??),然后将尝试将 XML 文档呈现为 HTML(5) 文档,而不首先运行其 XSLT 处理器。屏幕上什么也不会显示(其内容将继续显示引用 XML 页面的前一个页面,并将继续旋转图标,就好像文档从未完全加载过一样。
您可以完美地使用 Chrome 控制台,它显示所有资源都已加载,但它们被错误地解释。
所以是的,Chrome 目前只呈现 XML 文件(带有可选的前导 XSL 样式表声明),仅当它作为“text/xml”提供时,而不是作为“application/xml”,因为它应该为客户端呈现的 XML 提供XSL 声明。
对于用作“text/xml”或“application/xml”且不包含 XSL 样式表声明的 XML 文件,Chrome 仍应使用默认样式表将其呈现为 DOM 树,或至少作为其文本源。但它没有,在这里它再次尝试将它呈现为 HTML,并且立即在许多脚本(包括默认的内部脚本)上出现错误,这些脚本试图访问“document.body”以处理 onLoad 事件并注入一些 javascript处理程序在其中。
在 Chrome 中无法按预期工作的站点示例(Common Lisp 文档),但在支持客户端 XSLT 的 IE 中工作:
http://common-lisp.net/project/bknr/static/lmman/toc.html
上面这个索引页显示正确,但是所有的链接都会驱动到带有基本XSL声明到现有XSL样式表文档的XML文档,您可以无限期地等待,认为章节有问题要下载。阅读文档所能做的就是打开控制台并阅读“资源”选项卡中的源代码。
我在localhost上遇到了同样的问题.在互联网上寻找答案,我赞成添加--allow-file-access-from-files作品.我在Mac上工作,所以对我来说,我必须通过终端sudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files输入你的密码(如果有的话).
另一个小问题 - 除非你在.xml文件中添加对你的.xsl文件的引用,否则什么都不会有效<?xml-stylesheet type="text/xsl" href="<path to file>"?>.我没有立即意识到的另一件小事 - 您应该在浏览器中打开.xml文件,而不是.xsl.
| 归档时间: |
|
| 查看次数: |
96521 次 |
| 最近记录: |