XSL在Google Chrome中不起作用

我已经看到了很多关于这个的帖子。。。但我不能,为了我的生命,弄明白我的问题是什么!当我尝试用XSL转换XML时,Google Chrome只显示一个空白页面。当我查看源代码时,我看到了原始XML。他工作得很好

我有一个XML文档,看起来像这样

<?xml version=“1.0”encoding=“ISO-8859-1”?>
<?xml样式表type=“text/xsl”href=”http://localhost/xsl/listXSL.php“?>
<链接>
<link id=“1”name=“谷歌主页”url=”http://www.google.com/“点击次数=“0”/>
<link id=“2”name=“Facebook”url=”http://www.facebook.com/“clicks=”1“/>
<link id=“3”name=“Gmail”url=”http://gmail.com“clicks=”2“/>
&lt/链接>

。。。然后是链接的XSL文件,看起来像这样

<?xml version=“1.0”encoding=“ISO-8859-1”?>
<xsl:stylesheet version=“1.0”xmlns:xsl=”http://www.w3.org/1999/XSL/Transform“>
<xsl:template match=“/”>
<xsl:for each select=“links/link”>
<a>
<xsl:attribute name=“href”>
<xsl:select的值=“@url”/>
&lt/xsl:attribute>
<xsl:select的值=“@name”/>
&lt/a&gt&书信电报;br/>
&lt/xsl:for each>
&lt/xsl:template>
&lt/xsl:stylesheet>

您可能会注意到XSL文件实际上是一个PHP文件,但在其他浏览器中效果很好,我尝试将其更改为.XSL for Chrome,但没有任何帮助。我做错了什么

这不起作用的原因是Chrome以一种有争议的方式解决了一个安全问题,即阻止XML文件访问同一目录中的本地XSLT文件,而HTML文件可以访问同一目录中的.CSS文件

Chrome团队在2008年给出的理由如下:


想象一下这个场景:

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

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

  3. 本地网页创建的源为https://mail.google.com/mail/.

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

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

  6. 本地网页将收件箱中的内容放入一个文件夹中,并通过表单POST将数据提交给攻击者的web服务器。现在,攻击者拥有你的收件箱,这可能对垃圾邮件或识别盗窃有用

Gmail无法保护自己免受这次攻击


我同意这很烦人,作为修复,您有两种解决方案:

  1. 尝试使用--允许从文件访问文件开关运行chrome(我自己还没有测试过这个)

  2. 上传到主机上,一切都会好起来的

发表评论