如何使XSLT在chrome中工作?
我有一个XML文档,它与相应的。转换由客户端执行,不使用JavaScript 这在IE(震惊恐怖)中运行良好,但在Google Chrome中,只显示文档的文本节点 我知道在Chrome中进行客户端XSL是可能的,正如我所看到的例子,但我自己还不能复制这一成功如何使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
我做错了什么?在撰写本文时,存在一个需要
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.xmlEric说的是正确的
在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