如何使用JavaScript检查网站是否在线?再加上如何使这个函数的其余部分更好地工作的提示

How to check if site is online with JavaScript? Plus tips on how to make the rest of this function work better

本文关键字:函数 余部 提示 工作 更好 网站 检查 JavaScript 何使用 是否 在线      更新时间:2023-09-26

我需要检查一个网站是否在线,并获得ping时间。

我已经有一个粗略的ping时间(足够接近)。但我仍然需要检查网站是否在线,并使该函数运行五次,并获得最低的ping值(为了获得更准确)。

我的代码:

<script>
  function initPingTest(siteUrl){
    pingTester();
    function pingTester(){
      document.getElementById('site').innerHTML = '<center>' + siteUrl + '</center>';
      document.getElementById('pingT').innerHTML = '<center> testing.. </center>';
    var startTime=new Date();
    window.startTime=startTime.getTime();
    var imgSrc=siteUrl+ '?cacheBuster='+Math.random();
    var iFrame=document.getElementById('myPingTest');
    iFrame.onload=pingTime;
    iFrame.src=imgSrc;
    function pingTime() {
      var endTime=new Date();
      var pingResult = (endTime.getTime()-window.startTime);
      if(pingResult<hidden.hidden.value){
        document.getElementById('pingT').innerHTML = '<center>' + pingResult + '</center>';
        hidden.hidden.value=pingResult;
      }else{document.getElementById('pingT').innerHTML = '<center>' + hidden.hidden.value + '</center>';}
      } 
    } 
  }
</script>
<IFRAME style="display:none;" id=myPingTest></IFRAME>
<FORM NAME="hidden" STYLE="display:none"><INPUT TYPE="text" NAME="hidden" value="100000"></form>
<br>
<FORM method="get" NAME="ping" action="javascript:initPingTest(ping.url.value);"><font>Enter site adress(ie.www.yahoo.com)<br>http://</font>
  <INPUT TYPE="text" NAME="url" size="18"><input type="submit" value="Ping"/></form>
  <br>
  <table cellspacing=5px>
    <tr><th>
      Url:
    </th><th>
      Ping Time (miliseconds)
    </th></tr>
    <tr><td>
      <label id=site><center> - </center></label>
    </td><td>
      <label id=pingT><center> - </center></lable>
    </td></tr>
  </table>
</body></html>

虽然我不相信Javascript '真的'提供这种功能,但您可以创建一个xmlhttprequest对象,并比较它发送时间和连接时间的差异。

下面的代码显示了实现这一目标的可能方法:编辑:如果服务器现在关闭,应该发出警报

var address = "http://www.google.com";
var t1 = Date.now();
var t2;
var max = 100000;
var failed = false;
var httpReq = (window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
if(httpReq == null) {
    console.log("Error: XMLHttpRequest failed to initiate.");
}
httpReq.onreadystatechange = function() {
    var failTimer = setTimeout(function() {
                               failed = true;
                               httpReq.abort();
                               }, max);
    if (httpReq.readyState == 4) {  //Completed loading
        if (!failed && (httpReq.status == 200 || httpReq.status == 0)) {
            clearTimeout(failTimer);
            t2 = Date.now();
            var timeTotal = (t2 - t1);
            if(timeTotal > max) {
                onFail();
            } else {
                onSuccess(timeTotal);
            }
        }
        else {  //Otherwise, there was a problem while loading
            console.log("Error " + httpReq.status + " has occurred.");
            onFail();
        }
    }
}
try {
    httpReq.open("GET", address, true);
    httpReq.send(null);
} catch(e) {
    console.log("Error retrieving data httpReq. Some browsers only accept cross-domain request with HTTP.");
    onFail();
}

function onSuccess(timeTotal) {
    alert("Time needed to connect: " + timeTotal);
}
function onFail() {
    alert("Well this isn't good");
}

iframe也可能是一个可行的解决方案。