Chrome 怎么判断地址栏输入的东西是不是网址

Chrome 的地址栏代号是 Omnibox,omni 是万能、全能的词根,Omnibox 就是全能盒子的意思。在 2008 年 Chrome 发布的时候,其它浏览器都是在一个长的地址栏右侧有个短的搜索框,Omnibox 把搜索和网址输入合二为一是当时一个大的创新。

Omnibox 是个很复杂的东西,远比我们用户想的要复杂,Chrome 就自带一个给他们的开发者调试用的页面,chrome://omnibox:

Chrome 怎么判断地址栏输入的东西是不是网址

最核心的功能就是要判断你输入的东西是什么,是个 query 还是个 url,也就是调试页面里展示出的那个 type = 的值。比如当你输入 baidu.com

 Chrome 怎么判断地址栏输入的东西是不是网址

Ominibox 判断出了这个字符串是个 url,所以排在第一位的结果,也就是我们立刻回车执行的那个操作,就是 url-what-you-typed,也就是以网址形式打开你输入的内容,当然,我们的输入其实是缺了 https:// 协议头的,所以实际上它会给补上,也就是倒数第二列展示的那个。

而第二位的结果类型叫 search-other-engine,是因为它判断出了 http://www.baidu.com 刚好是浏览器内置的谷歌以外的一个搜索引擎,所以它会提示你,按下 TAB 键,就可以输入关键词,从而打开百度搜索。

第三位叫 search-what-you-typed,就是用默认的搜索引擎搜索输入的字符串,拼接好的谷歌网址也展示了出来。

前三个结果在 Omnibox 里展示出来是这样的:

 Chrome 怎么判断地址栏输入的东西是不是网址

实际上判断是不是 url 是个非常复杂的逻辑,更何况这里的输入不能期望它是个完整的 url,比如没有协议头的话,JS API 里new URL('www.baidu.com') 是可以直接报错说它不是个 url,但这里不行。而且这里还得考虑自己的业务属性,比如不允许的协议类型,xxx:www.baidu.com:
 
Chrome 怎么判断地址栏输入的东西是不是网址
 
它没有识别成 url 类型,也不是 query 类型,而是 unknown,unknown 类型类似 query,排第一的结果也是默认搜索,但是它和 query 不一样的是,也可以作为网址打开,箭头向下移动到最底部再回车就可以。比如我在之前回答中提到的谷歌公司内部短网址域名 go 的网址,就会被判断成 unknown:
 
Chrome 怎么判断地址栏输入的东西是不是网址
 

还有这里还得考虑本地路径格式,比如斜杠 / 表示根目录和波浪线 ~ 表示 Home 目录。

还有个有趣的 javascript: 协议,这是从网景时代 Brendan Eich 手里传下来的调试功能,BE 不在 Mozilla 以后,Firefox 已经完全禁掉了它。在 Omnibox 里,javascript:1+1 默认会是搜索,因为被判定成了 unknown:

Chrome 怎么判断地址栏输入的东西是不是网址

 

给TA打赏
共{{data.count}}人
人已打赏
技术教程

WordPress网站允许贡献者角色上传图片附件的方法

2022-10-20 22:45:52

技术教程

给兰空图床添加一个后台获取Token功能

2022-10-21 14:19:57

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索