帖文详情
avatar
@Candinya@nya.one

@alikia@social.a2x.pub 这是要手动实现 URL 规范检测吗 ​:anenw08:​

查看详情
0
0
0
avatar
@alikia@social.a2x.pub

@Candinya@nya.one bingo
就是浏览器搜索框里用来区分query是一个可访问的URL还是搜索词的类似功能​:stardust_melon:​

查看详情
0
0
0
avatar
@Candinya@nya.one

@alikia@social.a2x.pub try catch 里面放一个 new URL() 怎么样,成功了就是有效的, catch 了就是无效的 ​:nachoneko_10:​

查看详情
0
0
0
avatar
@alikia@social.a2x.pub

@Candinya@nya.one 主要逻辑就是这样,但是new URL()并不会检测host的TLD是否合法,于是就加上了相关逻辑
但是在检测TLD是否合法的时候……直接使用了类似host.split(".")的语句拆分出tld,但是忘记考虑了host压根没有dot的情况,于是一个单纯的weather由于没有dot被看作是host的tld部分送入validTLD函数检测,而此时恰好weather是一个合法TLD,就最终返回了true

查看详情
0
0
0
avatar
@Candinya@nya.one

@alikia@social.a2x.pub 为什么要检测 TLD 是否合法呢,这样岂不是还要维护一份不断更新的 ICANN 的 TLD 列表?

查看详情
0
0
0
avatar
@alikia@social.a2x.pub

@Candinya@nya.one 因为浏览器就是这么做的,咱只是尽可能复刻出一样的功能
确实要维护tld列表,所以我在想干脆单独搞一个npm包出来定期更新得了。
主流浏览器也整天更新,有新的tld他们肯定也会随着更新加进去,这个寒寒赌一波,绝对也是硬编码到源码的​:nachoneko_10:​

查看详情
0
0
0
avatar
@Candinya@nya.one

@alikia@social.a2x.pub 坏消息:浏览器能访问非 TLD 的(比如内网服务),它们只管合规的 URL 就交给 DNS 去解析,解析不出来的才会报错 ​:shizuku_oh:​

查看详情
0
0
0
@Candinya@nya.one
0/482
加载中