在使用 Chrome 浏览器的时候,你肯定会发现,在地址栏输入 google.com, bing.com 等网站时,右侧会出现按 Tab 进行搜索的功能,免去了先进入页面再进行搜索的步骤。如果你也想要此功能,那就继续看吧~
实现原理
怎么让浏览器知道你的网站有搜索功能?
非主动添加情况
在使用 Chrome 访问一个网站时,Chrome 会先查看有没有定义 OpenSearch XML,如果没有的话,会在网页中找有没有这样一个表单:
- 表单以GET方式提交(POST不可以);
- 表单的提交url为HTTP协议的(HTTPS不可以);
- 表单没有附加onSubmit事件(确保提交过程不被用户代码干涉);
- 表单中仅包含一个input输入框,而且类型为text(其他类型的都不可以,多余的控件也都不可以)
如果有这样一个表单,Chrome会认为这是一个搜索框,并根据这个表单的信息推断出这个网站的搜索方法。具体可以查看 Chrome 文档说明。
主动添加情况
如果 Chrome 没有自动识别上,我们只要遵循 OpenSearch XML 协议告诉 Chrome 即可,而且配置方法简单,无需对服务器改造。
前提条件
你的网站必须有搜索功能,且搜索链接较为固定,例如:
// 我的网站搜索格式
https://www.nousbuild.org/search/?q=搜索词
// Bing 的搜索格式
https://cn.bing.com/search?q=搜索词
// Google 的搜索格式
https://www.google.com/search?q=搜索词
// Baidu 的搜索格式
https://www.baidu.com/s?wd=搜索词
即,只要替换 关键词 的内容,即可进行搜索。
OpenSearch 协议
OpenSearch 是用于共享搜索结果的简单格式集合,在 Github 项目中,你可以查看到最新的、详细的说明:点击此处
截至此文章发布,目前最新的协议版本是 OpenSearch 1.1 Draft 6,请尽可能的查看最新说明。
实现操作
下面开始如何操作吧。首先在 首页 <header> 处添加一条 <link> 声明,仅仅在网站首页添加即可:
<link rel="search" type="application/opensearchdescription+xml" href="http://www.nousbuild.org/opensearch.xml" title="SA Search">
你只要修改 title=”网站名称/搜索引擎名称”, href=”xml文件的地址” 即可,建议使用绝对连接(即使支持https协议也建议写成http协议)。
接下来就是新建一个 XML 文件(opensearch.xml):
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> <ShortName>SA Search</ShortName> <Description>Search SA Website</Description> <Url type="text/html" method="get" template="http://www.nousbuild.org/search/?q={searchTerms}"/> </OpenSearchDescription>
我只定义了三个属性,ShortName 表示搜索引擎的名字,Description 表示搜索引擎的描述,Url 表示刚刚说的你的固定搜索格式,你只需将上面说的 关键词 替换为 {searchTerms} 即可 (同样,即使支持https协议也建议写成http协议)。
到此,大功告成,上传更新即可。
除了此方法定义外,还有 JavaScritp 定义当方法等,你可以自行继续阅读官方文档。
學習了,謝謝