避免IE中由于背景图像而出现"mixed content"警告的规则到底是什么?



这与SSL和由于CSS背景图像而导致的混合内容有关,但这个问题没有公认的答案,我要问的是一个更具体的问题。

在某些情况下,当访问HTTPS网站时,如果一个元素被赋予了带有背景图像的样式,IE将抛出"混合内容"警告。我发现一个论坛参考说,如果将引用放在样式表中,例如

,则可以避免警告。
#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 URL来引用图像,而不是一个相对的。

这里真正的故事是什么?是否有一些"官方"的解释,或者至少是对规则的参考?或者如果做不到这一点,是否有一套标准的指导方针,如果遵循这些指导方针,就极不可能触发警告?

使用完全限定的URI将避免IE8及以下版本错误地创建虚假URI(如about:/relative/file.png)的问题,从而触发混合内容警告。此问题已在IE9中修复。

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

如果我的诊断是正确的,这将意味着关于混合内容的规则没有尚未记录的怪癖。

还有:协议相关的url非常棒。一般来说。

同样的问题做了无数个小时,我还是想不出问题所在。然后我开始挑选我的源代码,我找到了它。我正在使用HTML5,并且我在条件注释中使用了一个shiv,以使HTML5元素在IE8及以下版本中工作。

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

我的问题是IE8和下降抛出一个错误。这个问题通过将上面的内容更改为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]-->

它可能会在未来拯救一些人。如果没有,那么祝你好运!

相关内容

最新更新