Cloudflare的火箭装载机+ Wordpress - >忽略脚本?

时间:2013-03-10 15:35:59

标签: javascript wordpress cloudflare

我正在尝试让Cloudflare的Rocket Loader在我的WP网站上运行。除了WP Visual Editor之外,一切正常。我按照这里的建议,但它不起作用:

如何在Wordpress中向javascript标签添加自定义属性?

Cloudflare说为了让Rocket Loader忽略javascript文件,我需要在我的脚本之前添加data-cfasync =“false”标记:

<script data-cfasync="false" src="/javascript.js"></script>    

https://support.cloudflare.com/entries/22063443--How-can-I-have-Rocket-Loader-ignore-my-script-s-in-Automatic-Mode-

Rocket加载程序不会忽略我的JS文件。

这是我的代码:

function rocket_loader_attributes( $url )
{
$ignore = array (

'http://www.mysite.com/wp-includes/js/tinymce/tiny_mce.js?ver=349-21274',
'http://www.mysite.com/wp-admin/js/editor.js?ver=3.4.2'

);
if ( in_array( $url, $ignore ) )
{ // this will be ignored
return "$url' data-cfasync='false";
}

return $url;
}
add_filter( 'clean_url', 'rocket_loader_attributes', 11, 1 );

我的代码出了什么问题?

我目前正在自动模式下使用Rocket Loader。

有人可以帮忙吗?

也许你可以指出我正确的方向。

谢谢。

3 个答案:

答案 0 :(得分:4)

我找到了解决方案!

正如本文所写: Controlling Cloudflare Rocket Loader

您的脚本几乎正确,但手动模式已损坏。您需要切换到自动模式,然后进行一些修改:

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');
}

答案 1 :(得分:2)

请注意,示例中标记没有type='text/javascript'属性。出于某种原因,Rocket Loader需要使用data-cfasync='false'而没有type='text/javascript' ......一个错误?

您的代码确实添加了data-cfasync='false'属性,但是也没有覆盖添加type='text/javascript'属性的WordPress行为,这使得Rocket Loader不会“忽略”您的脚本。

覆盖此WordPress行为可能很棘手,因为relevant code不支持过滤器......

答案 2 :(得分:1)

Ernest Marcinko 的 solution 工作正常;然而,如今更简单(并且可能更安全)的解决方案是使用 WordPress 4.1 中添加的 script_loader_tag 钩子。

参见 this answer 示例。