OpenSearch 基于 XML 的开放网站搜索协议
现在很多流行的浏览器,默认都支持地址栏的右边有个搜索框,这样的设计有利于用户快速的搜索内容,默认是使用 Google 搜索服务,不过天朝的浏览器就五花八门了,什么搜索引擎都有。
其实这是 OpenSearch 的一个应用,只要编写相应的微格式的 XML 文件,就可以制定相应的搜索框。参考 OpenSearch 的定义文档,可以基本获得基本的 XML 格式。比如某个典型的的搜索 XML 文件可以这样指定。
概述
OpenSearch 的是 Amazon.com 子公司 A9 公司所提出的一种分享搜寻结果的简单的格式,它于2005年3月首次在 O'Reilly 新兴技术会议上提出 OpenSearch 1.0 版本。目前使用版本为 1.1 版。
通俗点从普通用户角度来说:
例如用户访问某个网站,该网站具备搜索功能,并提供遵循 OpenSearch 规范的代码,那么支持 OpenSearch 功能的浏览器(目前有IE7、IE8、Firefox、Chrome)就能够自动发现并提示添加新的搜索插件/扩展到浏览器的搜索栏中。
例如如果用户使用的是 IE8 浏览器,那么在浏览器的右上角,就会发现一个小文本输入框,输入框前方的下拉菜单可以用来选择需要的搜索引擎(常用的比如百度、谷歌等)。
而一旦用户根据提示,选择安装某网站的搜索插件/扩展后,新的搜索功能也将会出现在搜索栏的下拉菜单中。
如何搜索您的网站是存在一个 XML 文件里并且是 OpenSearch 的标准 。 其次把这个 XML 通过 <head>
元素 (可以对每个网页 )中的 <link>
标记指向。 当用户在他们的浏览器访问您的网站可以侦测到这方面的资料,并允许用户将您的网站添加到他们的浏览器搜索栏中。
使用这种技术,您可以为您的网站创建一个自定义搜索,而且您的访问者可以添加到他们的浏览器搜索栏中。 加入后用户可以直接从他们的浏览器搜索栏中搜索您的网站,就像他们可以从同一界面上搜索 Google 或其他搜索引擎。 本文说明如何创建一个 XML 文件符合 OpenSearch 的标准,以及如何把它连结在您的网站的网页上。
技术分析
既然是 XML 文档,那么下面就是一份简单的示例,该代码是 Github 的 OpenSearch.xml :
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
xmlns:moz="http://www.mozilla.org/2006/browser/search/">
<ShortName>GitHub</ShortName>
<Description>Search GitHub</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16" type="image/x-icon">https://github.com/favicon.ico</Image>
<Url type="text/html" method="get" template="https://github.com/search?q={searchTerms}&ref=opensearch"/>
<moz:SearchForm>https://github.com/search</moz:SearchForm>
</OpenSearchDescription>
代码讲解
上面的 XML 文件很容易理解,除了固定的 XML 根以外,其他的定义从字面上就可以理解:
- InputEncoding 指定搜索的编码,根据网站的实际情况而定
- ShortName 这个是搜索的短名称,比如 Google 搜索
- Description 针对这个搜索框的描述,比如“淘宝购物搜索 – 只有你想不到,没有你淘不到”
- Image 类似网页的
favicon
,用于标识搜索 - Url 这个是最重要的参数,指定搜索的链接。它有很多参数,一般使用
{searchTerms}
参数指定搜索词即可。参数type="text/html"
注明返回的是页面(浏览器会跳转到这个页面),如果是其他格式就会使用相应默认程序打开(比如type="application/rss+xml"
就会使用 RSS 阅读器打开)。
添加方法
编写 OpenSearch 的 XML 格式就完成了,详细信息可以参阅其 OpenSearch 定义文档。下面要在页面中加入这个搜索,基本上可以分为两种方式。分别是页面的在 head 中加入 link 标记(类似 RSS),以及使用 JavaScript 方式添加(比如定义某个按钮触发)。
Link 方法
加入 link 标记非常简单,格式如下
<link rel="search" type="application/opensearchdescription+xml"
href="http://who.am.i/search.xml" title="ShortName" />
与 RSS 相似,rel 和 type 是固定的,我们主要指定 href (上述 xml 的 url 路径,保险起见使用绝对路径,即 http://
开头)以及 title (也就是搜索的短标题)即可。就这样,在 Explorer 以及 Firefox 中打开这个页面就可以看见相应的菜单了
JavaScrip方法
使用 JavaScript 添加比较麻烦(或许现在的情况会很好多)。我们主要会使用浏览器的扩展功能,在 Explorer 有个 window.external.AddSearchProvider
参数(详细文档)。典型的调用方法如下
window.external.AddSearchProvider('http://who.am.i/search.xml');
参数中的链接就是上述 Link 中的内容。在 Firefox 下可以使用
window.sidebar.addSearchEngine(
"http://who.am.i/search.xml", /* engine URL */
"favicon.ico", /* icon URL */
"ShortName", /* engine name */
"Description" ); /* category name */
参数和例子如示例代码中所述(官方文档)。值得注意的是在 Firefox 2 版本以后已经兼容 Explorer 的 window.external.AddSearchProvider
调用方法(详细信息)。那么我们对应的 JavaScript 代码就可以这样编写(为了兼容 Firefox 2 之前的版本,加入 else if 判断,如果觉得没有必要,可以不加)
function addEngine(){
if (window.external || window.external.AddSearchProvider) {
window.external.AddSearchProvider('http://who.am.i/search.xml');
} else if (window.sidebar && window.sidebar.addSearchEngine) {
window.sidebar.addSearchEngine(
"http://who.am.i/search.xml",
"favicon.ico", /* icon URL */
"ShortName", /* engine name */
"Description" /* category name */
);
}}
这样就可以将这个函数注册到某个链接或者按钮的点击事件中,就会跳出个确认框,如图用户点击确认以后,就加入到浏览器搜索框中了。
支持的网站和软件
支持 OpenSearch 索引功能的一些网站包括:
- www.opensearch.a9.com 协议创始人官方网站
- www.mycroft.mozdev.org Mozilla 提供的提交 OpenSearch 的网站
- www.searchxengine.com 一家提供 OpenSearch 功能安装的网站
支持的主流浏览器
- Internet Explorer 7 及其以上版本,提供搜索栏,能够自定义安装新的符合 OpenSearch 协议规则的插件/扩展。
- Mozilla Firefox 2 及其以上版本,同样提供搜索栏,允许安装新插件/扩展,以及 Mozilla 同时还推出一个名为
- MozSearch 的协议子集。MozSearch 主要面向 Web 用途,并只能用于 Firefox 相关的项目。MozSearch 扩展功能可接受一个 XML 命名空间前缀 OpenSearch 的文件,并提供一些新的特性,包括比如搜索建议。
- GoogleChrome,来自谷歌公司的新一代浏览器,以速度快和安全性而著称。不同于上面两款浏览器,Chrome 没有提供独立的搜索栏,而是将搜索栏整合进浏览器的地址栏中。通过输入OpenSearch 来源网址加上关键词,就可以快速进行搜索。
浏览器搜索栏插件/扩展
访问者
如果您正在使用的浏览器是:IE 7 版本或者以上、Mozilla Firefox 2 或者 3、Google Chrome,它们都默认提供一个专用的搜索框,用来直接搜索内容。OpenSearch 支持网站提供各种类型的搜索引擎,帮助您安装到浏览器的专用搜索框中。这样以后无须直接打开对应的网站,您就可以快速搜索到感兴趣的内容。举例来说,您访问某个网站,那么支持 OpenSource 功能的浏览器(目前有IE7、IE8、Firefox、Chrome)就能够自动发现并提示添加新的搜索插件/扩展到浏览器的搜索栏中。例如,您使用的是IE8浏览器。
网站主
如果您拥有自己的网站,并且网站具备搜索功能,那么可以制作对应的符合 Open Search 协议 的浏览器搜索栏扩展功能,让对您网站感兴趣的访问者直接从搜索栏就可以获得信息。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是个好东西,感谢分享!