注册条件(特定于浏览器)的Java脚本文件并将其入队?

时间:2012-06-06 作者:its_me

WP。SE社区始终建议使用wp_register_scriptwp_enqueue_script 用于在主题/模板中添加脚本(同样,wp_register_stylewp_enqueue_style 用于样式表)。

这就是我如何注册和排队我的脚本。。。

First, I add something like this in functions.php

add_action(\'init\',\'wpse54189_register_script\');
function wpse54189_register_script(){

    //Register scripts
    wp_enqueue_script( \'jquery\' );
    wp_register_script( \'aahan_bootstrap_transition\', get_template_directory_uri().\'/js/bootstrap-transition.js\');
    wp_register_script( \'aahan_bootstrap_carousel\', get_template_directory_uri().\'/js/bootstrap-carousel.js\', array(\'aahan_bootstrap_transition\'));    
    wp_register_script( \'wpse54189_ajax_comment\', get_template_directory_uri().\'/js/no-reload-comments.js\');
}

then call it in a template file (say, header.php) like this

<?php wp_enqueue_script( \'aahan_bootstrap_carousel\' ); ?>
<?php wp_enqueue_script( \'wpse54189_ajax_comment\' ); ?>
现在,说到这里,我该如何注册和排队等待特定浏览器识别的“条件JavaScript文件”?例如:

<!--[if lt IE 9]>
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script>
<![endif]-->
如何正确注册和排队?

PS: 我使用Reddle theme, 由Automatic的主题牧马人开发。和主题的标题。php直接使用前面提到的代码,即它不排队。那么,这是否意味着这是唯一的方法?

1 个回复
最合适的回答,由SO网友:Eugene Manuilov 整理而成

WP_ScriptsWP_Styles 课程落后wp_enqueue_scriptwp_enqueue_style 功能。如果您看看类的实现(scriptsstyles) 然后你就会看到WP_Scripts 类不支持任何类型的条件脚本,但是!你可以看到WP_Styles 做问题是wp_enqueue_style 不允许您设置条件。

因此,我们必须做一个小小的修改:

add_filter( \'wp_enqueue_scripts\', \'wpse2345_enqueue_scripts\' );
function wpse2345_enqueue_scripts() {
    wp_enqueue_style( \'mystyle\', \'url/of/my/style.css\', array(), \'1.0.0\' );

    global $wp_styles;
    $wp_styles->registered[\'mystyle\']->add_data( \'conditional\', \'lt IE 9\' );
}
由于所有注册的样式都存储在registered 字段WP_Styles 班每个注册样式都是_WP_Dependency 类,它允许您添加额外数据。

不幸的是,这种黑客技术不适用于脚本。

Additional Information:
我实际上是在Aaron Campbell\'s Essence Theme 昨晚,他注意到他同时调用了浏览器条件脚本和样式。

/**
 * @var WP_Scripts
 */
global $wp_scripts;
// Conditionally load this only for IE < 9
$wp_scripts->add_data( \'html5\', \'conditional\', \'lt IE 9\' );

/**
 * @var WP_Styles
 */
global $wp_styles;
// Conditionally load this only for IE < 8
$wp_styles->add_data( \'blueprint-ie\', \'conditional\', \'lt IE 8\' );
还有一个ticket and patch but it\'s not in core yet. 显然,如果没有补丁,条件脚本将无法工作,但需要注意的是,您可以在附加到wp_enqueue_scripts 行动

结束

相关推荐

在加载jQuery之后加载javascript

在加载jquery和jquery ui之后,我想为我的主题的首页加载一些javascript。这个钩子要用什么?我知道这些功能。php和我使用的是is\\u front\\u page()。通过在函数中插入wp\\u register\\u脚本。php,我可以在我想要加载的库之后对脚本进行排队,但我也只想在frontpage上加载它。在页眉上使用is\\u front\\u page()。php,则在jquery之前加载脚本。在加载jquery之后,我如何加载javascript,并且只能在首页上加载?