游客发表

js实现一个网址打不开打开另外一个

发帖时间:2026-10-17 04:37:55

打开一个网址,实现结果白屏或者转圈半天,个网最后浏览器甩给你一句“无法访问此网站”。址打这种时刻,不开用户已经流失了一半。打开与其让访客干瞪眼,实现不如用JavaScript写个备用方案:主域名挂了,个网自动跳转到镜像站。址打

核心逻辑就三行代码的不开事。先监听页面加载失败的打开状态,再判断当前地址是实现否可访问,不行就替换成备胎地址。个网当然,址打真实场景没这么简单——你得考虑跨域限制、不开加载超时、打开甚至用户浏览器禁用脚本的情况。

我的做法是,在页面里埋一段脚本。用Image对象去探测主站资源,比如加载一张1x1像素的gif。如果onerror触发了,说明主站真挂了,立刻执行location.replace()。这招最直接,因为图片请求不受同源策略限制,而且轻量到几乎不占带宽。

有个坑得提醒你:别用XMLHttpRequest去探测,跨域会报错。就算你加了mode:'no-cors',响应也是opaque,根本区分不了成功还是失败。我踩过这坑,调试了半天才发现是浏览器安全策略在作梗。

另一个细节是超时控制。网络抖动可能只是暂时性的,别急着跳转。我习惯设置3秒的延迟——如果3秒内图片加载成功,说明网络通着,只是慢;如果3秒后还没反应,再启用备用地址。这比立刻跳转体验好,用户不会觉得页面莫名其妙刷新了。

代码写出来大概长这样:

function checkSite() {  var img = new Image(); var timer = setTimeout(function() {  location.replace('https://backup.example.com'); }, 3000); img.onload = function() {  clearTimeout(timer); }; img.src = 'https://main.example.com/pixel.gif?t=' + Date.now(); } window.addEventListener('load', checkSite);

有人会问,为什么不直接用DNS层面的故障转移?那得控制域名解析服务,对普通站长不现实。还有用Service Worker拦截请求的,但配置复杂,浏览器兼容性也参差不齐。相比之下,这段脚本零依赖,复制粘贴就能用。

不过我得泼盆冷水:这方案只防主站宕机,防不了DNS劫持。如果你的域名解析被篡改,用户访问的是假站,脚本根本不会执行。真要全面防护,得配合HTTPS和HSTS预加载。但那是另一个话题了。

最后说个真实案例。我朋友运营一个小型博客,有一次主机商机房断电,整整瘫痪了4小时。他用了这个脚本,把流量导向了GitHub Pages上的静态备份。虽然功能不全,但至少读者能看到文章内容,评论留言也没丢。他后来跟我说,那4小时里,后台统计显示有83%的访客成功跳转到了备份站。

数字说明一切。别小看这几行代码,关键时刻真的能救命。

    热门排行

    友情链接