js判断一个url是否正常能打开,然后跳转不同的网址,咋写

72次阅读

共计 2906 个字符,预计需要花费 8 分钟才能阅读完成。

js 判断 baidu.com 是否正常,正常就跳转到 baidu.com

不正常就不跳转,在当前页面不动

咋写?球一个代码

网友回复:

注册 如果不是同一个域名的话,现代浏览器基本都会报跨域错误了,不管你用 ajax 还是 img.onload 还是 canvas 什么的。有个比较取巧的办法是利用大多数网站都有 /favicon.ico 这个文件可供访问,结合 img.onload 就能绕过跨域问题了:function check(url) {if (!url) return         if (url[url.length – 1] !== ‘/’) url += ‘/’         var img = document.createElement(‘img’)         img.onload = function() {             console.log(url, ‘ loaded, redirecting…’)             window.location = url         }         img.onerror = function(e) {console.log(url, ‘ fail to load, stay.’)             console.error(e)         }         img.src = url + ‘favicon.ico’         img.style.display = ‘none’         document.body.appendChild(img)     }     // check(‘https://www.baidu.com’)     check(‘https://www.baidufsfsdfad.com’) 复制代码 但如果这个网址没提供 favicon.ico 的话,那么就会误判了…… 追求准确的话,建议用服务端搭建一个检测接口,如要降低成本,也可以利用一些 serverless 服务。

腾讯云 6 折购 这种让 nginx 判断不是更简单???http 响应代码为 200 就跳转,不是 200 就返回一个空白页面

ggsmida js 跨域了 换思路

叼爆小朋友 虽然知道,但是下一个

nmdx 好的,下一个

require 救救孩子

笑花落半世琉璃 试试看用 AJAX 判断返回信息

腾讯云 6 折购 一般是 用 img 标签的 onerror

ctoh https://pyscript.net/ Run Python in Your HTML

teardrops AJAX 判断响应头代码,2XX-3XX 都放行 4XX 拦截不让跳即可

silence 判断分享链接是否有效吗?

注册 差不多 就是想在访问之前判断一下

注册 ajax

腾讯云 6 折购 好久没写了,要不写个了

beastie 如果不是同一个域名的话,现代浏览器基本都会报跨域错误了,不管你用 ajax 还是 img.onload 还是 canvas 什么的。有个比较取巧的办法是利用大多数网站都有 /favicon.ico 这个文件可供访问,结合 img.onload 就能绕过跨域问题了:function check(url) {if (!url) return         if (url[url.length – 1] !== ‘/’) url += ‘/’         var img = document.createElement(‘img’)         img.onload = function() {             console.log(url, ‘ loaded, redirecting…’)             window.location = url         }         img.onerror = function(e) {console.log(url, ‘ fail to load, stay.’)             console.error(e)         }         img.src = url + ‘favicon.ico’         img.style.display = ‘none’         document.body.appendChild(img)     }     // check(‘https://www.baidu.com’)     check(‘https://www.baidufsfsdfad.com’) 复制代码 但如果这个网址没提供 favicon.ico 的话,那么就会误判了…… 追求准确的话,建议用服务端搭建一个检测接口,如要降低成本,也可以利用一些 serverless 服务。

呆呆的游客 感谢大佬 试了一下真的可以 牛逼牛逼,有个小点忘记说了,怎么加个定时器,5 秒之后跳转呢?

ggsmida https://developer.mozilla.org/zh-CN/docs/Web/API/setTimeout

腾讯云 6 折购 window.setTimeout(() => {window.location = url}, 5000); 复制代码

ggsmida 请问这句代码放在最后就可以了吗

darius 这个写在哪里鸭?我是希望检测到网址可以访问之后,五秒之后跳转到 baidu.com。检测不可以访问就也不用倒计时了,什么都不做

腾讯云 6 折购 大佬 这两句代码啥区别 window.setTimeout(() => {window.location = url}, 5000); 复制代码 javascript:setTimeout(() => {window.location = url}, 5000); 复制代码

注册 下面那个是为了方便把事件触发后要执行的逻辑直接写在标签上。上面的就是你下面 javascript: 后的执行逻辑

注册 奥 听不懂  哪种好

darius 这种让 nginx 判断不是更简单???http 响应代码为 200 就跳转,不是 200 就返回一个空白页面

腾讯云 6 折购 大佬 这个代码火狐不能自动跳转  咋整

叼爆小朋友 我觉得让 Nginx 来干这个事不是简单多了

腾讯云 6 折购 可以考虑 jsonp

whl32 正解,跨域了,楼上的 ajax 方案肯定不行

oimo 怎么写

Mr. 太麻烦了,fetch 用 cors 跨域检测 status 就行 fetch(‘https://baidu.com’,{mode:”no-cors”}).then(res=>{if(res.status===200){}else{}})

腾讯云 6 折购 你应该用后端来做这事

注册 这个放在哪里?

注册 就是利用负载均衡的方式实现 可以看看 Tengine,Nginx 也有类似模块 http://tengine.taobao.org/document_cn/http_upstream_check_cn.html

腾讯云 6 折购 ? 这是 js 脚本你自己随便放啊,而且这只是判断,具体做什么你还要在 if 里面处理

whl32 没必要,fetch 有一个 mode cors 可以无视跨域,只是内容主体不可读罢了,但你只要判断 status 是否为 200 即可 https://developer.mozilla.org/en-US/docs/Web/API/fetch#mode

ChenYFan 大佬  送佛送到西,直接写一个可用的给我可以吗?我直接粘贴到.js 文件就可以直接用了 咱小白

正文完
 0