【问题标题】:Cloudflare's Rocket Loader + Wordpress -> Ignore scripts?Cloudflare 的 Rocket Loader + Wordpress -> 忽略脚本?
【发布时间】:2013-02-25 18:25:36
【问题描述】:

我正在尝试让 Cloudflare 的 Rocket Loader 在我的 WP 网站上运行。除了 WP 可视化编辑器外,一切正常。我遵循了这里的建议,但它不起作用:

如何在 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 loader 不会忽略我的 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。

谁能帮忙?

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

谢谢。

【问题讨论】:

  • 我已经尝试寻找解决方案好几个小时了。请帮忙。
  • 这条线看起来很有趣:return "$url' data-cfasync='false";.

标签: javascript wordpress cloudflare


【解决方案1】:

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

有关示例,请参阅 this answer

【讨论】:

    【解决方案2】:

    我已经找到了解决办法!

    正如本文所述: 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');
    }
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 这是他们文档中令人讨厌的遗漏。为此发送了一些反馈,结果进入了黑洞。
      猜你喜欢
      • 2020-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多