Chrome 39 XML/XSLT 渲染空白页面

3

我有一份来自2011年的旧代码,一直都能正常工作。但是在Chrome 39之后出现了问题。在试图诊断一段时间之后,我发现它可以在IE、Firefox和Chrome <=版本38中正常工作。从Chrome 39版本开始,只会显示一个空白页面。

似乎在处理xsl/xslt或xml方面有所改变,这导致页面无法正确渲染。

是否有任何已知的Chrome更改会导致此问题?是否有任何修复或解决方法?

谢谢!

示例:

http://redemption.armory DOT eternal-wow.com SLASH arena-ladder.xml?ts=2&b=Eternal-WoW%21 http://eternal-wow.com


你的第一个链接是404错误 - 此外,你应该在这里发布代码片段以帮助其他人协助你,而不仅仅依赖链接。请参阅此指南:http://stackoverflow.com/help/how-to-ask - Stewart_R
在使用http://web-sniffer.net/进行测试时,行为与我描述的相同。 - Stewart_R
你只是被登录重定向搞混了。我删除了第一个链接,这样你就不会一直尝试了。使用不需要登录的剩余链接即可。 - Derek
那个404错误不是你描述问题的一部分。404错误不是特定于浏览器的。 - Stewart_R
请阅读上文。同时,没有404错误。在端口80上连接到141.101.123.10...好的。GET /arena-ladder.xml?ts=2&b=Eternal-WoW%21 HTTP/1.1 Host: redemption.armory.eternal-wow.com Connection: close User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1) Accept-Encoding: gzip[CRLF] Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7 Cache-Control: no-cache Accept-Language: de,en;q=0.7,en-us;q=0.3 Referer: http://web-sniffer.net/HTTP响应状态:HTTP/1.1 200 OK - Derek
显示剩余6条评论
1个回答

2
在Firefox中链接有效,但在Chrome中导致空白页面。我使用Web开发工具检查后发现,Chrome从不同的URL加载xsl文件,例如:.._layout/arena/language.xsl(404),而不是../_layout/language.xsl(ok)。此外,在Chrome中,我会收到错误消息“资源被解释为样式表,但传输的MIME类型为application/xslt+xml:"http://redemption.armory.eternal-wow.com/_layout/arena/ladder.xsl"。
针对此问题,请参考Chrome says: Resource interpreted as Stylesheet but transferred with MIME type application/xml
主要问题似乎是误解了Chrome/Webkit Bug中的xsl:importxsl:include语句 - 请参见例如https://code.google.com/p/chromium/issues/detail?id=8441或在谷歌中搜索"xsl import relative path chrome"。 ladder.xsl中的第一个导入正常工作:<xsl:import href="../includes.xsl" />(从../_layout/includes.xsl加载)。但是,includes.xsl中的<xsl:import href="language.xsl"/>在Chrome中失败 - 它被解析为../_layout/arena/language.xsl而不是../_layout/language.xsl。在language.xsl中也适用于同样的情况,例如: <xsl:include href="nav/menu.xsl" />试图从../_layout/arena/nav/menu.xsl包含,而不是从../_layout/nav/menu.xsl。由于这似乎是Chrome Bug,因此您可以尝试将xsl文件复制到Chrome正在查找它们的位置,或者尝试调整包含/导入路径,因为Chrome似乎根据主模板解释位置 - 因为"../includes.xsl"在arena目录下的ladder.xsl中作为导入工作,但是在includes.xsl中的<xsl:import href="language.xsl"/>相对于language.xsl不被解析,而是相对于ladder.xsl进行解释,将其更改为<xsl:import href="../language.xsl"/>可能适用于Chrome(但可能不适用于其他浏览器,因此我不建议这样做)。有两个建议 - 要么您将导入/包含内容加倍,保留当前的导入/包含并将它们添加到ladder.xsl的相对路径中,或者,更干净的解决方案是检查是否可以将所有导入和包含移动到ladder.xsl并相应地调整路径。

你说得完全正确。我最初尝试使用符号链接来解决问题,但那没有起作用。所以我将所有包含的文件更改为绝对路径而不是相对路径,并解决了这个问题。这有点不太干净,需要进行数百次更改才能影响整个站点。我确信有更好的方法,也许可以使用.htaccess之类的东西,但我不确定该怎么做。 - Derek
没事了,这会破坏其他浏览器的功能。那根本不起作用。 - Derek
我再次尝试符号链接的事情,之前错过了一些。如果我获取每个链接,它实际上可以工作。只是非常混乱,让我发疯。 - Derek
@Derek 虽然这也是一种肮脏的解决方法 - 只需将xsls保留在当前位置,使其适用于非webkit浏览器,并将它们复制到Chrome尝试加载的位置不是一个选项吗?只是因为那不应该需要太多的更改。但如果符号链接方法有效,当然它是更好的解决方案,因为它更干净。 - matthias_h
谢谢你的帮助。我现在打算采用符号链接方法。这比复制文件要好得多。我已经将你的答案标记为最佳答案,但如果有人知道更好的方法或修复方法,请告诉我。 - Derek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接