有时我们需要判断用户能否加载某些网页或服务,如 Google、Disqus 等。
而我们可以用 JavaScript 来实现这样的检测功能。
方法一
使用 JavaScript 创建一个图片,设置图片的链接为 检测网址 + favicon.ico
。
onerror
事件触发不能加载的事件,onload
事件触发可以加载的事件,并使用 setTimeout
设置超时时间。
代码:
var img = new Image();
img.src = "https://google.com/favicon.ico";
var timeout = setTimeout(function () { img.onerror = img.onload = null; console.log("time out."); canNotLoad(); },3000);
img.onerror = function () { clearTimeout(timeout); console.log("load error."); canNotLoad(); }
img.onload = function () { clearTimeout(timeout); console.log("ok."); canLoad(); }
function canNotLoad() { console.log("无法加载"); } function canLoad() { console.log("可以加载"); }
|
缺点:不是每一个网站都存在 /favicon.ico
文件,但如果加载特定文件的话挺好的。
方法二
使用 JavaScript 创建一个 iframe 标签,设置标签的链接为 检测网址。
onerror
事件触发不能加载的事件,onload
事件触发可以加载的事件,并使用 setTimeout
设置超时时间。
代码:
var iframe = document.createElement("iframe");
iframe.src="https://google.com";
var timeout = setTimeout(function () { iframe.onerror = iframe.onload = null; console.log("time out."); canNotLoad(); },3000);
iframe.onerror = function () { clearTimeout(timeout); console.log("load error."); canNotLoad(); }
iframe.onload = function () { clearTimeout(timeout); console.log("ok."); canLoad(); }
function canNotLoad() { } function canLoad() { }
iframe.style = "display: none!important;";
document.body.appendChild(iframe);
|
缺点:页面上的其他外部链接也会被一并的加载过来,例如 JS 文件,CSS 文件,统计代码。
您也可以 点击此链接 前往 CodePen 体验。