这与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]-->
它可能会在未来拯救一些人。如果没有,那么祝你好运!