前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 JS 检测网址能否正常加载

使用 JS 检测网址能否正常加载

作者头像
OhhhCKY
发布2022-12-28 16:40:59
2.4K0
发布2022-12-28 16:40:59
举报
文章被收录于专栏:YFun's BlogYFun's Blog

有时我们需要判断用户能否加载某些网页或服务,如 Google、Disqus 等。

而我们可以用 JavaScript 来实现这样的检测功能。

方法一

使用 JavaScript 创建一个图片,设置图片的链接为 检测网址 + favicon.ico

onerror 事件触发不能加载的事件,onload 事件触发可以加载的事件,并使用 setTimeout 设置超时时间。

代码:

代码语言:javascript
复制
// 新建一个图片
var img = new Image();
// 设置图片的链接
img.src = "https://google.com/favicon.ico";

// 设定超时事件,延迟 3000 毫秒
var timeout = setTimeout(function () {
    // 清除 onerror 和 onload 事件
	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() {
    /* code here */
    console.log("无法加载");
}
function canLoad() {
    /* code here */
    console.log("可以加载");
}

缺点:不是每一个网站都存在 /favicon.ico 文件,但如果加载特定文件的话挺好的。

方法二

使用 JavaScript 创建一个 iframe 标签,设置标签的链接为 检测网址。

onerror 事件触发不能加载的事件,onload 事件触发可以加载的事件,并使用 setTimeout 设置超时时间。

代码:

代码语言:javascript
复制
// 新建 iframe 标签
var iframe = document.createElement("iframe");

// 设置 iframe 标签的网址
iframe.src="https://google.com";

// 设定超时事件,延迟 3000 毫秒
var timeout = setTimeout(function () {
    // 清除 onerror 和 onload 事件
    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() {
    /* code here */
}
function canLoad() {
    /* code here */
}
// 设定为不可见
iframe.style = "display: none!important;";
// 向 body 添加 iframe
document.body.appendChild(iframe);

缺点:页面上的其他外部链接也会被一并的加载过来,例如 JS 文件,CSS 文件,统计代码。

您也可以 点击此链接 前往 CodePen 体验。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法一
  • 方法二
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档