Modernizr.load не предоставляет ввод и поддержку заполнителя textarea в IE7 / IE8 - PullRequest
2 голосов
/ 20 февраля 2012

Я использую довольно неплохой плагин-заполнитель jQuery от Mathias Bynens для отображения заполнителей в моем сайте в браузерах, которые его изначально не поддерживают. Я вызываю плагин, используя пользовательскую версию Modernizr в нижнем колонтитуле страницы, сразу после кода Google Analytics. Я комбинирую его со скриптом (описанным в этом ответе о переполнении стека ) для отображения PNG в IE6.

Modernizr вызывается в шапке, и сайт также использует Typekit. jQuery вызывается только тогда, когда отсутствует функциональность заполнителя, поскольку в действительности она не нужна.

Соответствующий код, который я называю в нижнем колонтитуле блога WordPress, выглядит следующим образом:

1. Исправить PNG:



    s.parentNode.insertBefore(g, s)
    }(document, 'script'));
    function fixPngs() {
        for (i = 0; i  0) {
                fixPng(a, document.images[i])
            }
        }
    }
    function fixPng(a, b) {
        b.src = "http://cdn.donaldjenkins.com/media/themes/belgravia/2/spacer.gif";
        b.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"
        a "', sizingMethod='scale')"
    };

2. Добавить заполнители:


    Modernizr.load({
        test: Modernizr.input.placeholder,
        nope: ["http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js", "http://cdn.donaldjenkins.com/wp-content/themes/belgravia/js/placeholder.js"],
        complete: function () {
            $('input, textarea').placeholder();
        }
    });

3. Вызов сценария PNG


fixPngs();

К сожалению, заполнитель отображается в IE6 и IE9, но не в IE7 или IE8. Я попытался настроить html сайт с песочницей , который реплицирует ресурсы, описанные выше, чтобы попытаться определить причину проблемы, но я получаю ту же проблему. Я пробовал другие плагины-заполнители, с тем же результатом.


EDIT : После полезного ответа Матиаса Биненса и после проверки, работают ли плагины-заполнители jQuery без Modernizr, я пришел к выводу, что это проблема Modernizr: если плагин-заполнитель и jQuery загружаются систематически, без использования Modernizr, заполнители отображаются в все браузеры - при загрузке через Modernizr они отображаются в IE6 и 9, но не в IE 7 и 8.

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

1 Ответ

1 голос
/ 20 февраля 2012

http://cdn.donaldjenkins.com/wp-content/themes/belgravia/js/jquery.placeholder.min.js для меня ошибка 404.Я предполагаю, что это проблема?:)

$ curl -sI http://cdn.donaldjenkins.com/wp-content/themes/belgravia/js/jquery.placeholder.min.js | head -n 1
HTTP/1.1 404 Not Found

Возможно, это не связано с вашей проблемой, но вам не следует просто использовать проверку Modernizr.input.placeholder, если вам нужна поддержка textarea@placeholder.Причина этого в том, что некоторые браузеры поддерживают input@placeholder, но не textarea@placeholder.Modernizr.input.placeholder представляет только поддержку input.

Плагин выполняет эту проверку внутренне в любом случае, но если вы хотите использовать Modernizr, сделайте это так:

Modernizr.load({
  'test': Modernizr.input.placeholder && Modernizr.textarea.placeholder,
  'nope': ["http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js", "http://cdn.donaldjenkins.com/wp-content/themes/belgravia/js/jquery.placeholder.min.js"],
  'complete': function() {
    $('input, textarea').placeholder();
  }
});

Тем не менее, есливам не нужна поддержка textarea@placeholder, вы можете снять галочку и удалить textarea из селектора.

...