我正在尝试开发 Firefox 插件,它应该向内部开发人员的工具添加新元素,例如 console
和 scratchpad
。
我试图以最简单的方式做到这一点——通过 firefox 插件 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 中,由于您不能使用叠加层,您必须:
nsIWindowWatcher.registerNotification
注册一个观察者(SDK 曾经有一些东西,但它已被弃用) chrome://browser/content/devtools/scratchpad.xul
位置的窗口,忽略其他窗口。 load
。 load
ed,使用 DOM API 手动注入(inject)你想要的 DOM 元素(替换覆盖层) 安慰
您没有真正指定哪个控制台、浏览器控制台或每页控制台?
无论如何,你会叠加,
chrome://browser/content/devtools/webconsole.xul
在 SDK 中,事情变得更加棘手,因为每页 Web 控制台实际上并不是一个顶级窗口:
chrome://browser/content/browser.xul
并处理控制台 URI 的 load
事件(加载到 <xul:iframe>
中)。 chrome://browser/content/devtools/framework/toolbox-window.xul
相同,当 devtools 显示在分离窗口中时。 关于javascript - 是否可以将按钮添加到便笺簿?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24737403/