IE不使用重定向URL来解析相对URL

5
我有一个servlet,如果数据库中存在所需的colorScheme名称,则生成相应的CSS。然而,如果找不到colorScheme,它会使用response.sendRedirect()将位置重定向到我们CDN上实际文件的位置。
在所有浏览器中,这都可以正常工作,除了IE,当CSS包含对图标、背景等图片的相对链接时。其他浏览器使用重定向的URL(CDN URL)来解析CSS文件中的相对URL,但是IE仍然使用原始请求URL(servlet URL)。
由于某些原因,我无法将CSS文件中的相对URL更改为绝对URL。是否有一种方法可以让IE使用重定向的URL而不是请求URL来解析相对URL?

哇,这太疯狂了。试试301重定向而不是(默认的)302,这就像是一个无从控制的尝试。恐怕其他任何事情都不能从服务器端进行控制。你可能需要在视图渲染期间以编程方式生成必要的<link>并使用正确的URL。 - BalusC
1
为什么不将CDN URL放在HTML中呢?这样你就不需要额外的HTTP请求和302的开销了。你使用CDN是为了加速,所以不要先减慢速度,否则使用CDN就没有什么意义了。 - Gerben
我也尝试了301,但没有效果。不幸的是,对这个servlet的调用来自于一个JS“小部件”,它事先不知道CSS是否存在(colorscheme是传递给此“小部件”的参数)。我可能会采用类似jQuery的getScript的方法,尝试从servlet加载并使用错误处理函数从CDN加载CSS,如果servlet找不到CSS,则删除重定向。 - Anubis
糟糕!这是所有版本的IE还是只有某个特定版本? - toomanyairmiles
你能否提供一小段代码片段,以便我们复现问题?否则很难测试所提出的解决方案是否有效。 - linqq
据我所知,这适用于所有 IE 的版本,包括 8 或更早的版本。我没有测试过 9。 - Anubis
3个回答

2

听起来更像是代码设计问题。就我个人而言,我不依赖IE按照它应该做的去做任何事情。它总是让我失望 :(. 我会在HTML LINK标签中在头部的开始处包含CDN中的CSS,然后让JS导入覆盖它。这样你的网站在没有脚本的浏览器中也会看起来不错。


“就我个人而言,我不依赖IE来完成任何事情。” - Geeky Guy

0

作为一种解决方法,您可以使用CSS @import标签代替重定向到外部CSS文件。

@import url('http://www.example.org/style.css');

0

由于在调用colorScheme servlet之前,我们会在另一个servlet中处理HTML/JS,因此我所做的是检查所请求的皮肤是否为动态(来自servlet)或者在这个阶段是否不是动态的。如果colorScheme是动态的,我会写出带有CSS servlet地址的链接标签,否则我会写出CDN的地址。


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