使用javascript调用IE7的自定义搜索提供程序:是否可以?

时间:2009-10-03 17:37:36

标签: javascript internet-explorer search

我想为IE7或IE8创建一个自定义搜索提供程序,它不会请求带有搜索字符串作为参数的URL,而是调用JavaScript函数,将搜索字符串作为参数传递给函数。 首先,我在搜索提供程序XML中尝试了一些非常简单的事情:

<Url type="text/html" method="get" template="javascript:alert(&quot;{searchTerms}&quot;);"/>  

但是,尝试在IE7中添加此搜索提供程序会引发错误:“Internet Explorer无法安装此搜索提供程序。搜索提供程序的信息存在问题。”

如果我将网址更改为更常规的内容,例如“http://localhost/search.aspx?q= {searchTerms}”,那就可以了,所以我很确定问题确实是javascript:call。

我知道这不是搜索提供程序功能的设计目的,但对于我正在处理的特定情况(具有嵌套iframe的旧版客户端脚本密集内部网应用程序以及精心设计的耗时初始化),它会很高兴能够使用IE的搜索框在应用程序中触发搜索,而无需导航离开当前显示的页面。 如果还有其他解决方案可以实现这一目标,我很乐意了解它们。该应用程序本身仅限IE,因此无需在此讨论其他浏览器。

1 个答案:

答案 0 :(得分:1)

我能想到的唯一解决方案是使用将searchTerms添加到URI的片段组件的搜索提供程序。然后,您可以使用setInterval来解析window.location.hash条款。

<Url template="http://example.com/absolute-path/#q={searchTerms}" type="text/html"></Url>

缺点是您的网站必须是具有已知网址的“单页应用程序”,因为search provider specification不允许模板中的相对网址。

我创建了一个小型演示页面和提供程序:

  1. 导航至http://jsbin.com/evoqu
  2. 在文本字段中输入“http://jsbin.com/ovajo”,然后点击“添加搜索提供商”按钮
  3. 使用新添加的搜索服务提供商,并注意搜索字词显示在页面上。
  4. 您可以在此处查看和编辑演示页面和提供者的来源:
    http://jsbin.com/evoqu/edit
    http://jsbin.com/ovajo/edit