javascript – Firefox Extensions:为现有的chrome XUL元素添加功能
作者:互联网
对于踢和笑,我正在尝试编写Firefox扩展.只是一个非常简单的.我已经完成了我找到的教程,并且我已经获得了基本的“Hello,World”应用程序.
我想做的是向浏览器的Firefox Application DOM(即标签)中的现有元素添加一个事件监听器.到目前为止,我能够找到的所有资源都显示了如何向应用程序添加新元素,然后使用javascript向其添加操作.我已经尝试了几种方法来添加一个javascript函数(我知道它可以工作,因为我已经成功地将函数添加了元素)到现有元素.
我最近的尝试结构如下:
<?xml version="1.0"?>
<!-- in myExtension.xul -->
<overlay id="myExtension"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript">
var tabs = document.getElementsByTagName("tabbrowser-tab")
var len = tabs.length;
for (var i = 0; i < len; i++) {
tabs[i].ondblclick = function() {
alert('bam!');
}
};
</script>
</overlay>
这些东西都不起作用.就像我说的那样,我对这些东西都很陌生,而且我对周末项目有点启发.也许有一些方法可以确保我访问chrome文档而不是页面文档?虽然当我尝试使用这种技术获取页面元素(即“p”)时,这也不起作用,所以这可能是一个死胡同.
[编辑]
试图消除一些困惑:
我所说的“浏览器的DOM”是属于chrome界面的元素,而不是网页元素.我正在谈论将事件监听器专门放在已作为Firefox应用程序UI的一部分存在的元素上,例如选项卡(不是选项卡的内容,而是选项卡本身),或者说是主页按钮.我想重新定义Firefox应用程序GUI部分的行为.
比如说,每当有人点击“新标签”按钮或“关闭标签”按钮时,我想添加提醒.或者,如果我想重新定义“重新加载”按钮以重定向到当前选项卡的域的根,而不是仅重新加载页面.这些都是Firefox的现有部分,我想重新定义它们/通过扩展覆盖它们,特别是通过向它们添加javascript操作.
[/编辑]
[sidenote]是否允许在xul中嵌入javascript?或者它需要在一个单独的文件中?[/ sidenote]
有人对此有任何建议吗?谢谢.
解决方法:
覆盖代码中的javascript代码不起作用,因为它比gbrowser包含任何选项卡更早运行.
在Firefox(或Thunderbird)扩展中,您通常在加载事件侦听器中启动扩展:
window.addEventListener("load",
pinfresh.init,
false);
然后,init函数需要为各种tab事件注册事件监听器:
pub.init = function() {
var container = gBrowser.tabContainer;
container.addEventListener("TabOpen", tabOpened, false);
container.addEventListener("TabClose", tabRemoved, false);
};
打开新选项卡时,我们会注册另一个侦听器,当用户双击选项卡时,该侦听器将触发选项卡重新加载:
tabOpened = function(e) {
var tab = e.target;
tab.addEventListener("dblclick", tabDoubleClicked, false);
}
tabDoubleClicked = function(e) {
gBrowser.reloadTab(e.target);
}
完整的代码如下所示:
<overlay id="pinfresh"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript">
pinfresh = function() {
var pub = {};
tabOpened = function(e) {
var tab = e.target;
tab.addEventListener("dblclick", tabDoubleClicked, false);
}
tabRemoved = function(e) {
var tab = e.target;
tab.removeEventListener("dblclick", tabDoubleClicked, false);
}
tabDoubleClicked = function(e) {
gBrowser.reloadTab(e.target);
}
pub.init = function() {
var container = gBrowser.tabContainer;
container.addEventListener("TabOpen", tabOpened, false);
container.addEventListener("TabClose", tabRemoved, false);
};
return pub;
}();
window.addEventListener("load",
pinfresh.init,
false);
</script>
</overlay>
对于使用选项卡的代码片段,我建议在Mozilla开发中心使用Tab Browser页面.
我建议将Javascript代码放在自己的文件中,而不是将其包含在XUL文件中.外部Javascript文件中的错误显示在Firefox的错误控制台中,这使得调试变得更加容易.
标签:javascript,javascript-events,firefox-addon,xul 来源: https://codeday.me/bug/20190614/1237591.html