Запретить выполнение HTML-содержимого до завершения boomerang.js

Ситуация такова:

Javascript boomerang.js используется в качестве теста сетевой скорости клиента, проблема в том, что HTML-контент выполняется браузером и не ожидает результата бумеранга. Но результат бумеранга необходим, потому что в html-содержимом есть некоторые изменения.

Как можно не выполнять html-контент до того, как boomernag.js даст результат?

РЕДАКТИРОВАТЬ: после небольшого поиска в Google нет возможности запретить браузеру не загружать html-контент до завершения работы javascript, потому что бумеранг не блокирует этот контент, даже если мы установили autorun: false в BOOMR.init и затем вызываем его через BOOMR.page_ready(); в любом месте. Это родной JavaScript асинхронного поведения.

Поэтому мы НЕ МОЖЕМ использовать следующий код:

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel='stylesheet' type='text/css' media='all' href='css/style.css' />
<link rel='stylesheet' type='text/css' media='all' href='css/colorbox.css' />
<script type="text/javascript" src="js/speedtest/boomerang.min.js"></script>
<script>
BOOMR.init({ beacon_url: "http://www.zzz.xx", user_ip: '10.0.0.1', site_domain: "http://www.zzz.xx", BW: { nruns: 3, base_url: 'http://www.zzz.xx/test_images/', cookie: 'SPEED-test'}});
 </script>
  <script type="text/javascript" src="js/preload.js"></script>

preload.js - это просто проверка файлов cookie, и, если они существуют, не делать тест снова, если нет, запустите speedtest от BOOMR.subscribe

function getCookie(cname)
 {
 var name = cname + "=";
 var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) 
  {
  var c = ca[i].trim();
  if (c.indexOf(name)==0) return c.substring(name.length,c.length);
  }
 return "";
}


var version_set=getCookie("speedtest_version_set");

if (version_set == "low"){

                         $(document).ready(website_init_low);      

 } else if (version_set == "high"){

                        $(document).ready(website_init_high);

   } else {


 BOOMR.subscribe('before_beacon', function(o) {  

if(o.bw) {  
              netspeed = Math.abs(parseInt(o.bw*8/1024)); 
    var netspeed_limit = 5000; 

              if (netspeed < netspeed_limit) { 

                         document.cookie="speedtest_version_set = low";
                         $(document).ready(website_init_low);

                } else {
                        document.cookie="speedtest_version_set = high";  
                        $(document).ready(website_init_high);


                }

       }
});

}

Единственное, что мы можем сделать, это создать отдельный файл index.php и затем вызвать index_low.html или index_high.html следующим образом:

<?php 
echo "<script type='text/javascript' src='js/speedtest/boomerang.min.js'></script>";
echo "<script type='text/javascript' src='js/speedtest/bw.js'></script>";
echo "<script type='text/javascript'>BOOMR.init({ beacon_url:     'xxx', user_ip: '10.0.0.1',          site_domain: 'xxxxxx', autorun: false, BW: { nruns: 3, base_url: 'js/speedtest/test_images/', cookie:      'xxxxx'}})</script>";
echo "<script type='text/javascript'>

function getCookie(cname)                       //read cookie by javascript
{
var name = cname + '=';
var ca = document.cookie.split(';');
   for(var i=0; i<ca.length; i++) 
     {
    if(typeof String.prototype.trim !== 'function') {     //IE bug fix -IE not support    trim();
      String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g, ''); 
     }
    }
  var c = ca[i].trim();                        //IE bug fix -IE not support  trim();
      if (c.indexOf(name)==0) return c.substring(name.length,c.length);
     }
   return '';
   }

var netspeed;
var netspeed_limit = 5000;  
var version_set=getCookie('speedtest_version_set');

if (version_set == 'low'){                                                                     
                    window.location = 'index_low.html'

 } else if (version_set == 'high'){                                                            
                    window.location = 'index_hight.html'
} else{

 BOOMR.page_ready();                              //fire BOOMR only from this place
 BOOMR.subscribe('before_beacon', function(o) {  

 if(o.bw) {  

netspeed = Math.abs(parseInt(o.bw*8/1024)); 
          if (netspeed < netspeed_limit) { 
                document.cookie='speedtest_version_set = low';
                window.location = 'index_low.html'

            } else {
                document.cookie='speedtest_version_set = high';
                window.location = 'index_high.html'  
            }

   }

});

}
</script>";
   ?>

И, конечно, гораздо лучше проверять куки-файлы по переменной $_COOKIE в PHP, а не по javascript.

1 ответ

На этот вопрос ответили на странице вопросов о бумеранге здесь: https://github.com/lognormal/boomerang/issues/27

Другие вопросы по тегам