CSS中多个子域的协议相对URL

时间:2011-09-13 20:40:13

标签: css ssl internet-explorer-8 internet-explorer-7 internet-explorer-6

我们的php驱动的网站最近添加了ssl证书以支持https协议,虽然我们的页面没有通过http调用的资源,但我们通过IE8遇到了IE6的问题。

我已阅读此帖:http://paulirish.com/2010/the-protocol-relative-url/

所以,基本上,我需要替换所有的

background: url('/images/whatever.gif');

使用:

background: url('//www.mydomain.com/images/whatever.gif');

我不太喜欢在几百个css文件中使用我的域名,但我想这样做:对于我的开发,测试和登台环境来说,这样做的最佳做法是什么?与生产站点不同的子域。我需要在css文件中使用域名的动态表示,很可能是从某种配置文件驱动的,但是如何?

3 个答案:

答案 0 :(得分:7)

您不必添加主机名即可使用协议相对URL。您已经使用的表单是协议相关的,因为它没有指定协议。

您能详细说明您遇到的问题吗?您是否已通过测试确认具有域名的URL可以解决您的问题?

PS:如果你有数百个CSS文件,你可能会对动态生成系统感到满意,但这是另一回事。

答案 1 :(得分:1)

问题是IE6,7,8中的弹出窗口,表示页面中有混合内容(应该是https页面中包含的http资源)。 Chrome,FF4及更高版本和IE9不显示那些弹出窗口,这是正确的。没有包含http的资源。

一些博客文章似乎指出背景网址是此问题的根源。其中一篇帖子(http://blogs.msdn.com/b/ieinternals/archive/2009/06/22/https-mixed-content-in-ie8.aspx)收到了来自MSFT的Eric Law的评论。 :

  

调试器报告以下是触发的URL   提示:

     

“约:/images/lightview/inner_slideshow_play.png”

     

当然,该URL实际上并不存在于您的标记中。它看起来   就像有动态创建IFRAME和注入内容一样   进入那个框架。空框架的默认URL是:空白,   这会导致提示。

和......

  

要注意的其他问题:在IE6中,我们将“about:blank”视为   不安全的内容,以及“javascript:”和“res:”。在IE7中,我们   修复了“about:blank”的情况,但我们还没有(还)改变了javascript   和res。

因此,MSFT已知道并确认了其旧版浏览器的问题,这些浏览器会创建一个IFRAME并注入然后生成错误的内容。

我偶然发现的大多数变通方法都指向使用协议相对网址,就像我展示的第一个网址一样。我不确定你可以考虑'background:url('/ images / whatever.gif');'作为一个无协议的调用,因为这个臭名昭着的IE6到8的bug。

- 编辑:处理解决方案。我们在javascript文件中发现了这一点,从一开始它就是真正的问题:

<input target="_blank"class="sub" type="button" style="background-image:url(../images/name.gif);">

答案 2 :(得分:0)

好的!明白了。

顺便说一句,如果有人想要找到他们在https网页上错误报告包含混合内容的IE6,IE7或IE8的确切问题,请使用以下脚本:http://www.enhanceie.com/dl/scriptfreesetup.exe < / p>

所以最后这是我在上一篇文章中谈到的按钮。将它更改为导入的类,将背景图像交换为背景并在开头摆脱../就可以了。

感谢大家的帮助,我仍然会对Ned的输入做出回答,因为它有一些帮助。