1 ink19 2022-08-14 21:55:10 +08:00 js 没办法跨域吧。。。感觉写不了 |
![]() | 2 Moeyua 2022-08-14 21:55:12 +08:00 via iPhone 如果不考虑重定向等等问题的话,可以直接像该地址用 Ajax 发送 Get 请求,如果返回的 HTTP code 是 200 就说明页面能够正常访问。 |
3 qiubangzhu OP @ink19 用啥能实现,不要后台的情况下 |
![]() | 4 wenzichel 2022-08-14 22:01:34 +08:00 纯前端存在跨域的问题,肯定没法实现,只能借助于后端了,把将要跳转的地址发给你们后端接口,后端去请求这个地址的数据,若能正常请求,则告诉前端可以跳转,否则不能跳转。 |
![]() | 5 autoxbc 2022-08-14 22:02:50 +08:00 ![]() const urls = [ 'https://www.baidu.com/img/flexible/logo/pc/result.png', 'https://www.xxxxbaidu.com/img/flexible/logo/pc/result.png', ]; urls.forEach( url => { const img = new Image(); img.Onload= () => console.log(`url: ${ url }`); img.src = url ; } ); |
7 penzi 2022-08-14 22:40:45 +08:00 跨域问题就用 iframe ,readyState |
![]() | 8 liKeYunKeji 2022-08-14 22:50:14 +08:00 via iPhone 要用后端来获得请求头。 |
![]() | 9 xiaoz 2022-08-14 23:36:22 +08:00 via Android 2 楼办法是可行的,比如 jquery 的 ajax 就可以发起一个请求,只获取 head 头,然后根据状态码判断。3xx 以下视为正常,大于 4xx 或超时视为异常。 |
![]() | 10 beastk 2022-08-15 00:19:38 +08:00 via iPhone 请求资源文件呗,img css js ,然后判断加载 |
![]() | 11 MossFox 2022-08-15 00:55:41 +08:00 ![]() 我不知道合不合理,如果有问题的话麻烦指出下 try { // 超时时间 6s let cOntroller= new AbortController(); setTimeout(() => { controller.abort(); }, 6000); let res = await fetch("https://baidu.com/", { mode: "no-cors", // ↑ 这种模式 (opaque mode) 不可以获取到任何响应数据和请求头,但如果出现响应异常,依然会有错误抛出。通过这个来检查是否成功访问了目标地址 signal: controller.signal }); // 接着是有正常响应的情况 } catch (e) { // 失败情况 (超时或网络错误) } |
![]() | 12 MossFox 2022-08-15 00:57:57 +08:00 描述里面不清楚指的是 "**用户**能否访问目标网址" 还是 "目标网址的服务当前是否可用"。如果是前者,上面那个方案可以试试,否则的话会需要有后端参与。 |
![]() | 13 Slshaolong 2022-08-15 01:04:20 +08:00 via Android 可以去试试请求这个网页的一张图片 然后用 onload 试试 一般这样的话我就写后端了 |
![]() | 14 a90120411 2022-08-15 02:25:45 +08:00 #11 的方法是可行的。 |
15 yitalin 2022-08-15 03:46:51 +08:00 via iPhone 昨天刚做了个类似的,测试网页连接速度 http://speedtest.im/news.html |
18 zhuweiyou 2022-08-15 09:06:47 +08:00 哪怕楼上的方案可行,这个需求仍然不合理. 直接页面放多个链接,入口 1XX, 入口 2YY, 让用户自己去点得了 |
19 hgc81538 2022-08-15 10:21:47 +08:00 via iPhone ![]() |
20 wangxiaoaer 2022-08-15 10:25:43 +08:00 检查对应网站的相对固定图片是最靠谱的了。 有些提到借助后端的,这种也不靠谱:后端和前端的连通性是不一样的,后端能访问不代表前端可以。 |
![]() | 22 lisongeee 2022-08-15 11:59:42 +08:00 #11 可以优化一下,把 try/catch 去掉 ```js let cOntroller= new AbortController(); setTimeout(() => { controller.abort(); }, 6000); let isOk = await fetch("https://baidu.com/", { mode: "no-cors", signal: controller.signal }).catch(()=>false); ``` |
23 qiubangzhu OP @lisongeee 这个咋用 直接复制粘贴到.js 文件里面就行了吗?我直接复制粘贴进去(.js 文件里面原本没有任何代码) 无法自动跳转 |
24 hxy100 2022-08-15 16:39:23 +08:00 @yitalin 并不是啊,我测试过,一是用一个没有有效解析的假域名,二是用一个访问正常,但不允许跨域的网站,两种情况测试下来收到的 status 都是 error ,并不能有效区分; |
![]() | 25 ruoduan 2022-08-15 17:22:45 +08:00 ```js const img = new Image() img.Onload= () => { console.log('可以访问') } img.src = `https://www.baidu.com/favicon.ico` ``` |