javascript - 是否可以将按钮添加到暂存器?

标签 javascript firefox firefox-addon firefox-addon-sdk

我正在尝试开发 Firefox 附加组件,它应该向内部开发人员的工具添加新元素,例如 consolescratchpad

我试图以最简单的方式做到这一点——通过 firefox addons SDK (Jetpack),但是在文档中只提到了将元素添加到主工具栏。

是否可以在便签本工具栏上添加按钮?如果是,我在哪里可以找到代码示例?

感谢您的帮助!

最佳答案

simple way possible — via firefox addons SDK (Jetpack)

这实际上或多或少是“可能的最困难的方法”。 SDK 使它支持开箱即用的东西变得简单,比如向主窗口添加工具栏按钮,或上下文菜单项等。但是当涉及到 SDK 不适合的东西时,就像这里的情况一样,你实际上必须编写 SDK 样板 + 低级 XUL/XPCOM 东西并且不能使用 XUL 覆盖作为额外的好处(因为无需重新启动的附加组件不支持这些)。

Scratchpad - 带有 XUL 覆盖层

这是一个完整 XUL 覆盖附加组件。

install.rdf

<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
  <Description about="urn:mozilla:install-manifest">
    <em:id>my@addon</em:id>
    <em:name>My Add-on</em:name>
    <em:version>1</em:version>
    <em:creator>Nils Maier</em:creator>

    <!-- Firefox -->
    <em:targetApplication>
      <Description>
        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
        <em:minVersion>30.0</em:minVersion>
        <em:maxVersion>33.*</em:maxVersion>
      </Description>
    </em:targetApplication>
  </Description>
</RDF>

chrome.manifest

content my-addon ./
overlay chrome://browser/content/devtools/scratchpad.xul chrome://my-addon/content/overlay.xul

overlay.xul

<?xml version="1.0"?>
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <commandset id="sp-commandset">
    <command id="my-addon-button-command" oncommand="alert('hellow, world');"/>
  </commandset>
  <toolbar id="sp-toolbar">
    <toolbarbutton id="my-addon-button" command="my-addon-button-command"
      class="devtools-toolbarbutton" label="My Add-on button"/>
  </toolbar>
</overlay>

重点是:修改 scratchpad.xul 随你便。

Scatchpad - 使用 SDK

在 SDK 中,由于您不能使用叠加层,因此您必须:

  1. 通过 nsIWindowWatcher.registerNotification 注册观察员(SDK 曾经为此提供一些东西,但已被弃用)
  2. 使用适当的 chrome://browser/content/devtools/scratchpad.xul 监听窗口位置,忽略其他窗口。
  3. 一旦打开这样的窗口,请收听 load .
  4. 一次load ed,使用 DOM API 手动注入(inject)你想要的 DOM 元素(替换覆盖)
  5. 确保在再次卸载窗口时正确处理事情。
  6. 确保在您的附加组件被禁用后自行清理(再次从任何仍打开的窗口中删除所有 UI,当然还有观察者本身)。

控制台

您没有真正指定哪个控制台、浏览器控制台或每页控制台?

无论如何,你会叠加, chrome://browser/content/devtools/webconsole.xul

在 SDK 中,事情变得更加棘手,因为每页 Web 控制台实际上并不是顶级窗口:

  • 您需要注意它是否是顶级窗口(浏览器控制台)
  • 注意 chrome://browser/content/browser.xul和处理load控制台 URI 的事件(加载到 <xul:iframe> 中)。
  • chrome://browser/content/devtools/framework/toolbox-window.xul也是如此当 devtools 显示在分离的窗口中时。

关于javascript - 是否可以将按钮添加到暂存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24737403/

相关文章:

javascript - 使用 Google Analytics 获取当前访问者的推荐人、付费/自然人和关键字

javascript - 检查 firebase js .forEach 方法是否完成?

javascript - Reporting Services - RSClientPrint.Print 不是函数

css - Background-repeat-x/y 在 Firefox/Safari 中不起作用

firefox-addon - 为什么 Mozilla Firefox 的扩展(附加组件)会自动删除?

javascript - 我正在使用 jquery next 和 cosest 选项来仅选择一个元素,但这将类应用于每个元素

javascript - 使用正下方的文本区域逐步滚动裁剪后的图像

javascript - 同源策略不允许读取远程资源

Firefox beforeSearch 事件

javascript - 在 Firefox 中检测页面加载完成事件