由于背景图像,在IE中避免“混合内容”警告的规则究竟是什么?

时间:2011-08-05 19:41:56

标签: javascript jquery html internet-explorer https

这与SSL and mixed content due to CSS background images有关,但这个问题没有被接受的答案,而我要问的是一个更具体的问题。

在访问HTTPS网站的某些情况下,如果为某个元素指定了带背景图片的样式,IE将抛出“混合内容”警告。我发现one forum reference表示如果将引用放在样式表中就可以避免警告,例如

#someElement a {
    width:11px;
    height:11px;
    display:block;
    overflow:hidden;
    background:url(../images/sprites_list.png) no-repeat;
    cursor:hand;
    cursor:pointer;
    background-position:0px -72px;
}

但是如果你尝试创建内联元素,那就不是了,

$('#someElement').append("<a title='something' style='background: url(../images/sprites_list.png) no-repeat; ... // etc

事实上,这对我有用。我见过其他人说你必须使用绝对的https网址来引用图片,而不是相对的图片。

这里的真实故事是什么?是否有一些“官方”解释或至少提到规则是什么?或者如果没有,是否有一套标准的指导方针,如果遵循这些指导方针,则极不可能触发警告?

3 个答案:

答案 0 :(得分:10)

使用完全限定的URI可以避免IE8及以下问题错误地创建一个虚假的URI,例如:/relative/file.png,它会触发混合内容警告。在IE9中修复了此问题。

答案 1 :(得分:0)

我认为你获得不同结果的原因不是因为一种方法“更安全”,而是因为当IE加载它时,基本文档中不存在违规URL。如果您将A直接放在文档中而不是在页面加载后将其编入脚本,我希望您会收到警告。

如果我的诊断正确,那就意味着对混合内容的规则没有任何尚未记录的怪癖。

此外:协议相对URL非常棒。总的来说。

答案 2 :(得分:0)

经过无数小时的同样问题,我无法弄清楚问题。然后我开始挑选我的源代码并找到它。我正在使用HTML5,并且我在条件注释中使用了一个shiv来使HTML5元素在IE8中运行并向下运行。

<!--[if lte IE 8]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->

我的问题是IE8和down发生错误。通过将以上内容更改为https来解决该问题,具体如下:

<!--[if lte IE 8]><script src="https://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->

我没有对它进行过测试,但我认为以下内容也可能有用。

<!--[if lte IE 8]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->

这可能会挽救一些人。如果没有,那么祝你好运!