我需要为特定的JavaScript文件禁用Cloudflare Rocketloader,我花了几个小时阅读并尝试不同的解决方案但没有成功。我正在运行WordPress,需要省略特定.js文件的自动火箭加载器。
将此推荐代码插入我的主题functions.php会引发以下错误。
脚本网址:example.com/wp-content/plugins/waveplayer/assets/js/waveplayer.js
functions.php中的代码
function rocket_loader_attributes_start() {
ob_start();
}
function rocket_loader_attributes_end() {
$script_out = ob_get_clean();
$script_out = str_replace(
"type='text/javascript' src='{rocket-ignore}",
'data-cfasync="false"'." src='",
$script_out);
print $script_out;
}
function rocket_loader_attributes_mark($url) {
// Set up which scripts/strings to ignore
$ignore = array (
'script1.js'
);
//matches only the script file name
preg_match('/(.*)\?/', $url, $_url);
if (isset($_url[1]) && substr($_url[1], -3)=='.js') {
foreach($ignore as $s) {
if (strpos($_url[1], $s)!==false)
return "{rocket-ignore}$url";
}
return "$url' data-cfasync='true";
}
return "$url";
}
if (!is_admin()) {
add_filter( 'clean_url', 'rocket_loader_attributes_mark', 11, 1);
add_action( 'wp_print_scripts', 'rocket_loader_attributes_start');
add_action( 'print_head_scripts', 'rocket_loader_attributes_end');
}
错误:
GET https://example.com/blog/sheol-stranger-things/%7Brocket-ignore%7Dhttps://example.com/wp-content/plugins/waveplayer/assets/js/waveplayer.js?ver=2.0.5 404 ()
我也尝试将此插入我的header.php,但这也没有省略Rocket Loader的脚本。
<script data-cfasync="false" src="/waveplayer.js"></script>
答案 0 :(得分:2)
您可以通过添加data-cfasync =&#34; false&#34;来让Rocket Loader忽略单个脚本。属性到相关的脚本标记,例如:
<script data-cfasync="false" src="/javascript.js"></script>
但您必须确保data-cfasync
元素出现在src
之前。此外,这不能在另一个JavaScript文件中完成。
如果这仍然有问题,您可能需要考虑使用页面规则禁用给定端点的RocketLoader。
但是,我的建议是在您的网站上启用HTTPS,然后禁用RocketLoader。通过在您的站点上启用HTTPS,您将从HTTP / 2功能(如并发)中受益,而无需使用RocketLoader。
资源: