跳转至

镜像检测原理

实现网址在线监测(基于客户端的 JavaScript)有以下几种方法:

基于 img onload 检测

function isSiteOnline(url,callback,path='/favicon.ico') {
    var timer = setTimeout(function () {
    callback(false);
    // 设置10秒钟的超时时间
    }, 10000)
    // 创建一个img元素并且动态加载
    var img = document.createElement("img");
    img.onload = function () {
    clearTimeout(timer);
    callback(true);
    }
    // 一般来说,使用默认的path即可,但是如果没有ico的话,需要另外找一个比较小的图片来进行加载
    // 加入一个random防止缓存
    img.src = url + path + "?v=" + Math.round(Math.random() * 9999);
}

基于 img onerror 标签

onerror 事件 onerror 事件会在文档或图像加载过程中发生错误时被触发,因此我们可以利用这个时间差计算出 HTTP 延迟。

var ping = 1

setInterval("ping++",100);

el.innerHtml = "<img src="+urlList[i]+"/"+Math.random()+" width='1' height='1' onerror='autotest("+i+")' style='display:none'>"

function autotest(i){ show.text(ping*100+"ms")

基于 Ajax 进行测试

//jquery检查连接的url服务是否有效,适用所有浏览器
const $ = require('jquery')

function NetPing(pingUrl) {
  $.ajax({
    type: "GET",
    cache: false,
    url: pingUrl,
    data: "",
    success: function () {
      alert("网址有效,开始加载。。");
      ipcRenderer.send('asynchronous-message',pingUrl); //异步将渲染进程的数据传给主进程
    },
    error: function () {
      alert("无效网址,请重新输入!");
      $("#vueUrl").val("");
    }
  });
}

参考文件

  • https://blog.csdn.net/zhouzuoluo/article/details/113525754
  • https://vircloud.net/exp/js-http-latency.html#selection-13.0-971.1

评论