Drupal 7:使用 drupal_add_js 时如何将异步属性添加到外部 JS 脚本?
Drupal 7: how do I add the async attribute to an external JS script when using drupal_add_js?
我试过:
drupal_add_js('http://somesite.com/pages/scripts/0080/8579.js', [
'type' => 'external',
'async' => TRUE
]);
和
drupal_add_js('http://somesite.com/pages/scripts/0080/8579.js', [
'type' => 'external',
'async' => 'async'
]);
没有结果。
有人知道我怎样才能做到这一点吗?
您无法仅通过指定选项来实现此目的,因为 drupal_add_js()
不支持 async
属性。
建议使用 defer
更好(恕我直言)因为 它不会阻塞 HTML 解析。
async
: 异步获取脚本,然后 HTML 暂停解析以执行脚本,然后继续解析。
defer
: 脚本异步获取,仅在 HTML 解析完成后执行。
然而,如果你真的需要 async
属性,你可以实现 hook_preprocess_html_tag
来改变主题变量,像这样:
function moduleortheme_preprocess_html_tag(&$variables) {
$el = &$variables['element'];
if ($el['#tag'] !== 'script' || empty($el['#attributes']['src'])) {
return;
}
# External scripts to load asynchronously
$async = [
'http://somesite.com/pages/scripts/0080/8579.js',
#...
];
if (in_array($el['#attributes']['src'], $async)) {
$el['#attributes']['async'] = 'async';
}
}
我试过:
drupal_add_js('http://somesite.com/pages/scripts/0080/8579.js', [
'type' => 'external',
'async' => TRUE
]);
和
drupal_add_js('http://somesite.com/pages/scripts/0080/8579.js', [
'type' => 'external',
'async' => 'async'
]);
没有结果。
有人知道我怎样才能做到这一点吗?
您无法仅通过指定选项来实现此目的,因为 drupal_add_js()
不支持 async
属性。
建议使用 defer
更好(恕我直言)因为 它不会阻塞 HTML 解析。
async
: 异步获取脚本,然后 HTML 暂停解析以执行脚本,然后继续解析。defer
: 脚本异步获取,仅在 HTML 解析完成后执行。
然而,如果你真的需要 async
属性,你可以实现 hook_preprocess_html_tag
来改变主题变量,像这样:
function moduleortheme_preprocess_html_tag(&$variables) {
$el = &$variables['element'];
if ($el['#tag'] !== 'script' || empty($el['#attributes']['src'])) {
return;
}
# External scripts to load asynchronously
$async = [
'http://somesite.com/pages/scripts/0080/8579.js',
#...
];
if (in_array($el['#attributes']['src'], $async)) {
$el['#attributes']['async'] = 'async';
}
}