Сценарий постановки в очередь только для IE


Я хочу использовать dd belatedpng, чтобы PNG на моем веб-сайте правильно отображались в IE. Сценарий, который я всегда использовал на сайтах, не связанных с WordPress, был

<!--[if lt IE 7 ]>
    <script src="js/dd_belatedpng.js"></script>
    <script> DD_belatedPNG.fix('img, .ir'); </script>
<![endif]-->

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

В любом случае, есть ли способ добавить IE условия для постановки сценария в очередь и/или регистрации сценария?

Author: José Tomás Tocino, 2011-01-08

4 answers

WordPress имеет глобальную переменную $is_IE:

global $is_IE;
if($is_IE) enqueue_script(...);

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

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

 5
Author: onetrickpony, 2011-01-08 18:52:32

Запрос не поддерживает вывод более сложных блоков, только файлы сценариев.

Лучшим подходом для этого была бы небольшая функция, которая повторяет этот блок (условно, если вам это не нужно на каждой отдельной странице), подключенная к wp_head.

 3
Author: Rarst, 2011-01-08 14:45:23

Добавление к ответу Rarst, это можно сделать аналогично следующему, в вашем файле функций.

add_action( 'wp_head', 'add_belatedpng_js' );

if ( ! function_exists( 'add_belatedpng_js' ) ) {
  function add_belatedpng_js() {

   if (! is_admin()) {      
    echo '
    <!--[if lt IE 7]>
      <script src="js/dd_belatedpng.js"></script>
      <script> DD_belatedPNG.fix('img, .ir'); </script>
    <![endif]-->';
 }
}
 0
Author: FFrewin, 2014-01-16 16:24:28

Этому вопросу 4 года, так что я предполагаю, что вы даже больше не используете его. Однако для других, кто сталкивается с этим вопросом, это можно сделать следующим образом:

add_action('wp_enqueue_scripts', function() {
        wp_enqueue_script( 'dd_belatedpng',
            get_template_directory_uri() . '/js/dd_belatedpng.js', 
            array(), 
            '1.0.0', 
            false 
        );
        wp_script_add_data('dd_belatedpng', 'conditional', 'lt IE 7');
});

add_action('wp_head', function(){
   if (wp_script_is( 'dd_belatedpng', 'enqueued' )) {
       echo '<!--[if lt IE 7]><script> DD_belatedPNG.fix('img, .ir'); </script><![endif]-->' . "\n";
   }
});

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

Я считаю, что это лучший способ реализовать это.

 0
Author: Bryan Willis, 2016-01-13 11:14:03