Как вызывать изображения из CSS, когда страница загружается с использованием https - PullRequest
1 голос
/ 23 декабря 2009

Этот сводит меня с ума. Это (пока) еще одна особенность IE6 / 7, но одна из моих веб-страниц должна быть загружена с использованием https. В IE6 / 7 я получаю страшное сообщение «содержит защищенные и незащищенные элементы», которое вызывает у пользователей панику. Я прошел код сверху вниз и изолировал проблему (как ее видит IE) для фоновых изображений в моем CSS. Тем не менее, они используют абсолютные пути ...

background: url(/images/imagename.jpg);

Похоже, это отключает IE и вызывает небезопасное сообщение на https. У кого-нибудь есть идеи, как обойти это? Любая помощь высоко ценится.

Ответы [ 4 ]

2 голосов
/ 23 декабря 2009

Это не должно доставлять вам хлопот, если сам файл CSS также поступает из HTTPS. Абсолютные пути без явного протокола (т. Е. /path/to/file вместо http://example.com/path/to/file) наследуют протокол вызывающего их файла, будь то HTML или CSS.

Можем ли мы увидеть вашу страницу? Возможно, на странице, которую вы пропускаете, есть что-то еще.

1 голос
/ 23 декабря 2009

Вы правы, относительные пути URL в стиле фона приведут к появлению этого сообщения в IE6 / 7.

Единственный метод, который я успешно использовал, - это либо построить абсолютный путь из доступных данных браузера, либо жестко закодировать абсолютный путь. Вот пример того, как вы можете построить абсолютный путь с помощью JavaScript:

Использование определения стиля верхнего уровня, например:

<style type="text/css">
    .fixBgImage {
        background: url(/images/imagename.jpg);
    }
</style>

Вы можете использовать функцию JavaScript, которая ищет это правило и изменяет стиль backgroundImage для этого правила. (Имейте в виду, что в этом примере предполагается, что вы определили правило на листе [0])

        // this function needs to be run after the page has loaded
        // (body.onload, window.onload or something similar)
        function fixBackgroundImages() {
            // using sheet 0 defined first on this page
            var rule = getRule('.fixBgImage', document.styleSheets[0]);         
            if (rule != null) {
                var bgUrl = rule.style.backgroundImage.replace(/^url|[\(\)]/g, '');
                bgUrl = fixHttpsBgUrl(bgUrl);
                rule.style.backgroundImage = 'url("' + bgUrl + '")';
            }
        }

        function getRule(name, sheet){
            var rules = (sheet.rules) ? sheet.rules : sheet.cssRules;

            for (var i = 0; i < rules.length; i++) {
                if (rules[i] && rules[i].selectorText == name) {
                    return rules[i];
                }
            }

            return null;    
        }

       // This function returns an absolute path if https is used
       function fixHttpsBgUrl(imgUrl){
          if (document.location.protocol.indexOf('https') >= 0){
            var basepath = document.URL.substring(0, document.URL.lastIndexOf('/') + 1);
            var pcol = document.location.protocol + '//';
            var host = document.location.hostname;
            var port = (document.location.port) ? ':' + document.location.port : '';

            if (imgUrl.indexOf('/') == 0){ // server root path
              imgUrl = pcol + host + port + imgUrl;
            }
            else{  // app root
              imgUrl = basepath + imgUrl;
            }
          }
        }
0 голосов
/ 27 декабря 2009

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

http://blogs.msdn.com/ieinternals/archive/2009/06/22/HTTPS-Mixed-Content-in-IE8.aspx

0 голосов
/ 23 декабря 2009

Попробуйте с:

background: url(//images/imagename.jpg);

Согласно этот ответ должен работать. Попробуйте использовать его и для таблицы стилей, например:

<link rel="stylesheet" type="text/css" src="//style/style.css" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...