共计 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 文件就可以直接用了 咱小白