Какие именно правила избегают предупреждения "смешанного контента" в IE из-за фоновых изображений?

Это связано с 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;
}

но нет, если вы попытаетесь создать элемент inline, a la

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

и действительно, это работает для меня. Я видел других, которые говорят, что вам нужно использовать абсолютный URL https для ссылки на изображение, а не на относительный.

Какая здесь реальная история? Есть ли какое-то "официальное" объяснение или, по крайней мере, ссылка на правила? Или, если это не так, существует ли стандартный набор руководящих принципов, который, если следовать, крайне затрудняет предупреждение?

Ответ 1

Использование полностью квалифицированного URI позволит избежать проблемы IE8 и ниже, неправильно создавая фиктивный URI, например:/relative/file.png, который запускает предупреждение о смешанном содержании. Эта проблема была исправлена ​​в IE9.

Ответ 2

Я думаю, что причина, по которой вы получаете разные результаты, заключается не в том, что один метод "безопаснее", а потому, что URL-адрес нарушения отсутствует в базовом документе, когда IE загружает его. Я ожидаю, что вы получите предупреждение, если бы вы разместили этот A непосредственно в документе вместо того, чтобы писать его после загрузки страницы.

Если я прав в своем диагнозе, это будет означать, что нет никаких недокументированных причуд к правилам о смешанном контенте.

Также: URL-адреса, относящиеся к протоколу, являются удивительными. Просто вообще.

Ответ 3

После бесчисленных часов той же проблемы я не мог понять проблему. Затем я начал выбирать свой исходный код, и я нашел его. Я использую 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]-->

Это может спасти кого-то по дороге. Если нет, то удачи!