2015-07-22 1 views
1

У меня есть сайт, который находится под Cloudflare, и мы включили на нем RocketLoader.Сценарий для отключения Rocketloader Cloudflare на сайте

Теперь выяснилось, что по крайней мере в Chrome и Firefox он разбивает сайт - внутри самого сценария Cloudflare есть ошибка, и страница просто перестает загружаться.

Лицо, имеющее доступ к Cloudflare для отключения RocketLoader, в настоящее время недоступно. Могу я что-нибудь сделать?

Я попытался добавить

<script> 
    window.CloudFlare = []; 
</script> 

в качестве первого сценария, потому что сценарий CloudFlare идет следующим образом:

<script type="text/javascript"> 
//<![CDATA[ 
try{ if (!window.CloudFlare) { ... 
//]]> 
</script> 

Но получается, что если мой сценарий внутри <head>...</head> тогда скрипт Cloudflare является всегда вставлен раньше. Я попытался добавить его до <head>, но, похоже, это не имеет никакого эффекта.

ответ

1

Это только нарушение на определенной странице? Если да, то вы можете попробовать отключить Rocket Loader, используя PageRules на этой странице.

+0

Он сказал, что человек с доступом к CloudFlare недоступен, поэтому он не может устанавливать правила страницы, а также. – oriadam

2

Попробуйте этот сценарий, чтобы отменить урон RocketLoader:

undo_rocketloader = function() { 
     // If CloudFlare is active attempt to undo the damage to document functions 
     if (window.CloudFlare) { 
      var i, hp = HTMLDocument.prototype; 
      for (i in hp) { 
       // Using try to avoid "illegal invocation" errors 
       try { 
        // Make sure document functions are same as HTMLDocument.prototype functions 
        if (typeof hp[i] == 'function' && document[i] != hp[i]) 
         document[i] = hp[i]; 
       } catch (e) {} 
      } 
      // TODO: Retrieve window.getComputedStyle 
      // Following method failed because Window.prototype.getComputedStyle is undefined. 
      // I couldn't find getComputedStyle in any prototype :(
      // if (window.getComputedStyle != XXX.getComputedStyle) 
      // window.getComputedStyle = XXX.getComputedStyle;    
     } else { 
      // If CloudFlare was not loaded yet - this will prevent it from loading 
      CloudFlare = { 
       define: function() {} 
      }; 
     } 
     var damagedScripts = document.querySelectorAll('script[type="text/rocketscript"]'); 
     for (i = 0; i < damagedScripts.length; i++) { 
      // If `type` is removed before changing the src, the script would run. 
      // We rely on the `data-rocketoptimized` to tell if the script was already called or not (see rocket-loader code near "Scanning for scripts") 
      if (damagedScripts[i].getAttribute('data-rocketoptimized') != "true") { 
       // script has not run yet? remove type, so that the src change will cause this script to run 
       damagedScripts[i].removeAttribute('type'); // 'text/javascript' is default when `type` is removed 
      } 
      damagedScripts[i].setAttribute('data-rocketoptimized', 'true'); // make sure to never run it again 
      if (damagedScripts[i].hasAttribute('data-rocketsrc')) 
       damagedScripts[i].setAttribute('src', damagedScripts[i].getAttribute('data-rocketsrc')) // when selecting a script we look for it's src attribute, not data-rocketsrc 
      damagedScripts[i].removeAttribute('type'); // 'text/javascript' is default when `type` is removed 
     } 
    } //undo_rocketloader 

JSFiddle: https://jsfiddle.net/z39sdg73/

 Смежные вопросы

  • Нет связанных вопросов^_^