【问题标题】:Is it possible to use the findbar with a non-browser element?是否可以将查找栏与非浏览器元素一起使用?
【发布时间】:2014-04-13 20:37:56
【问题描述】:

有没有办法将findbar 用于非浏览器元素?

我正在尝试采用 findbar 在 listbox 上的 prefwindow 上使用它。

【问题讨论】:

    标签: javascript firefox-addon xul thunderbird-addon xbl


    【解决方案1】:

    不幸的是,<findbar> 小部件实际上是与浏览器元素一起使用的。如果您伪造了必要的浏览器 API,您可以将其与其他数据一起使用,但不能保证它在将来会继续工作。特别是,有问题的 API 在 Firefox 26 中从同步变为异步,这破坏了所有实现它们的扩展,例如 Adblock Plus 或 Stylish。

    implementation of the <findbar> widget 中,您可以看到它当前对浏览器的期望:

    Components.utils.import("resource://gre/modules/Services.jsm");
    
    var fakeBrowser = {
      finder: new Finder(),
      _lastSearchString: "",
      _lastSearchHighlight: false,
      currentURI: Services.io.newURI("http://example.com/"),
      contentWindow: null,
      addEventListener: function() {}
      removeEventListener: function() {},
    };
    

    这个假浏览器可以分配给findbar.browser property。这里重要的部分是finder 属性,通常是Finder object defined by Finder.jsm。当然,您可能希望实现自己的对象并提供相同的 API。

    【讨论】:

    • 谢谢。我开始使用 Finder.jsm 和列表框,我认为我最好按照您的建议使用 fakeBrowser 从头开始​​。也许为了更好的兼容性,我可能也应该使用我自己的 findbar.xml xbl 副本,以防将来发生变化。
    • @vanowm:去过那里,做到了。这里的缺点是你不能像浏览器那样设置你的 findbar 小部件的样式。您可以将样式留给浏览器,但如果适用于较新的 findbar 版本的样式适用于您的样式,您将面临再次损坏的风险。您可以使用自己的 findbar 样式副本 - 但浏览器实际上对每个操作系统都有不同的 findbar 样式(当然还有自定义主题)。即使你在你的扩展中包含所有三个样式文件,你的 findbar 可能会在几个浏览器版本之后开始显得过时。
    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 2011-10-12
    • 2021-05-24
    相关资源
    最近更新 更多