【问题标题】:IE6 Javascript problems with $Revision$ in the filename文件名中带有 $Revision$ 的 IE6 Javascript 问题
【发布时间】:2009-11-05 19:46:24
【问题描述】:

我们最近开始使用 SVN 关键字将当前修订号自动附加到我们所有的 <script src="..."> 包含(所以它看起来像这样:<script language="javascript" src="some/javascript.js?v=$Revision: 1234 $"> </script>)。这样,每次我们将新的代码副本推送到生产环境时,用户缓存都不会导致用户仍在使用旧的脚本版本。

它工作得很好,除了 IE6。出于某种原因,IE6 偶尔会表现得好像其中一些文件不存在。我们可能会收到奇怪的错误语句,例如“Unterminated String Literal on line 1234”,但是如果您尝试将调试器进程附加到它,它不会在该行停止(如果您对调试器提示说“是”,则没有任何反应,并且页面执行继续)。它的日志条目显示在 IIS 日志中,表明用户确实在接收文件(状态代码 200,传输的字节数适当)。

这似乎也仅在通过 https 而非标准 http 提供页面时发生。为了进一步复杂化,它不一定总是发生。您可能会刷新页面 5 次并且一切正常,然后您可能会再刷新 20 次并且每次都失败。对于大多数用户来说,它似乎总是有效,否则总是失败。当企业环境中有多个用户的安全性和缓存设置强制相同时,这甚至是不可预测的。

任何想法或建议都会非常感谢,这已经让我发疯了好几个星期了。

【问题讨论】:

  • 仅供参考 "$" 是 URI 中的保留字符 (tools.ietf.org/html/rfc3986#section-2.2)。你的网址真的应该(合法地)是?v=%24Revision%3A%201234%20%24
  • 是的,尽管浏览器很友好地为我们纠正了这一点,至少根据网络服务器日志,它要求 URL 完全转义。

标签: javascript svn internet-explorer-6


【解决方案1】:
  1. 使用fiddler2 检查您的日志,以确保浏览器请求该页面,而不是使用缓存。还要检查 JS 脚本的 URL 和返回的标头。
  2. 您使用的是 GZip 吗? There has been issues reported with it
  3. 我建议使用Internet Explorer Application Compatibility VPC Image 进行测试。这样一来,您就可以使用 100% 的 IE6 进行测试,而不是使用那些声称在另一个浏览器中模拟 IE6 的插件。

【讨论】:

  • Fiddler2 以及 IIS 日志表明请求正在通过并以状态代码 200 进行响应,并传输了适当数量的字节。是的,gzip 压缩已经到位。这可能是罪魁祸首,需要进一步调查,但如果是这样,我不确定为什么 URL 上没有 ?v=$Revision: 1234 $ 从来没有给我们带来问题。
【解决方案2】:

我认为这是一个非常聪明的主意。但是,我认为这个问题可能与 url 中的空格有关。从技术上讲,网址应该对空格进行编码。

看看是否可以自定义SVN中的关键字,生成不带特殊字符的修订号。

【讨论】:

  • 浏览器在发出请求之前会转义特殊字符($、: 和空格)。
猜你喜欢
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多