OpenSearch 基于 XML 的开放网站搜索协议

发布于 2018-12-24 字数 8204 浏览 968 评论 1

现在很多流行的浏览器,默认都支持地址栏的右边有个搜索框,这样的设计有利于用户快速的搜索内容,默认是使用 Google 搜索服务,不过天朝的浏览器就五花八门了,什么搜索引擎都有。

OpenSearch 基于 XML 的开放网站搜索协议

其实这是 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}&amp;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"
  external-link="true" 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)

Jsmile 2018-12-25 05:09:50 1 楼
是个好东西,感谢分享!
0 0 回复