Add async script

时间:2014-06-24 作者:molnarm

我正在开发一个插件,该插件必须在页面上插入脚本(类似于RefTagger), 这很容易使用wp_enqueue_script, 但有两个原因我不能这样做:脚本标记必须有一个ID,并且应该异步执行。

我找到了三种可能的解决方案,但我真的不喜欢其中任何一种:

  1. Just echo the script in wp_footer这是最简单的一个,我可以完全控制脚本标签,但它可能会遭到反对(我打算将我的插件提交到插件库,所以欢迎提供有关官方指南的任何建议)
  2. Use the standard functions and use filters to modify the script tag. 的答案this question 详细描述这个过程,我的问题是,它非常粗糙(将来可能会中断),并为clean_url 对于单个脚本标记,有一个性能成本
  3. Create a snippet that dynamically injects the script, save it as a file and use the standard methods. 这是一种非常简洁的方式,但还有一个脚本需要下载,这意味着页面加载速度较慢
是否有其他方法可以做到这一点,或者我的解决方案是否可以接受?

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

这个script_loader_tag 版本4.1中添加的过滤器解决了此问题。要向排队脚本添加异步属性,可以执行以下操作:

/**
 * Add an aysnc attribute to an enqueued script
 * 
 * @param string $tag Tag for the enqueued script.
 * @param string $handle The script\'s registered handle.
 * @return string Script tag for the enqueued script
 */
function namespace_async_scripts( $tag, $handle ) {
    // Just return the tag normally if this isn\'t one we want to async
    if ( \'your-script-handle\' !== $handle ) {
        return $tag;
    }
    return str_replace( \' src\', \' async src\', $tag );
}
add_filter( \'script_loader_tag\', \'namespace_async_scripts\', 10, 2 );
如果要向脚本添加id,可以在str_replace()

更多信息可通过文章获取»Add Defer & Async Attributes to WordPress Scripts«由Matthew Horne和开发商参考script_loader_tag.

结束