向所有元素添加单击事件侦听器- Firefox插件
adding a click event listener to all elements - Firefox Add-on
我想给页面中的所有HTML元素分配一个点击处理程序。但是在用户点击我的插件按钮之后,而不是在页面加载时。
为起始点。我无法分配一个全局点击处理程序。有什么想法?谢谢。
var buttons = require('sdk/ui/button/action');
var button = buttons.ActionButton({
id: "fieldResolver",
label: "Field Resolver",
icon: {
"16": "./icon-16.png",
"32": "./icon-32.png",
"64": "./icon-64.png"
},
onClick: handleClick
});
function handleClick() {
}
当我使用jquery时,我得到这个错误,所以jquery不是一个选项:Message: ReferenceError: $没有定义
首先,您的附加组件的代码是生活在一个不同的,比页面的代码更特权的上下文中-在不久的将来,它们也将是两个不同的进程-所以您不能直接访问页面:您必须使用内容脚本。我建议你仔细阅读链接的页面,因为它将为你提供他们如何相互沟通。
说,我的想法是:当用户点击一个按钮,附加一个内容脚本到当前页面,如果还没有。在内容脚本中,监听click事件,并执行您的操作。
下面是main.js
const { ActionButton } = require("sdk/ui/button/action");
const { data } = require("sdk/self")
const tabs = require('sdk/tabs');
let button = ActionButton({
id: "fieldResolver",
label: "Field Resolver",
icon: {
"16": "./icon-16.png",
"32": "./icon-32.png",
"64": "./icon-64.png"
},
onClick: handleClick
});
function handleClick() {
// get the current tab
let tab = tabs.activeTab;
// you would probably want to store worker somewhere to be sure
// that you won't attach more than once
let worker = tab.attach({
contentScriptFile: data.url("content.js")
});
}
可以看到,您需要一个contentScriptFile
,它必须位于附加组件的data文件夹中。您的content.js
看起来像:
function clickHandler (event) {
// do something with the element clicked
console.log(event.target.outerHTML);
}
window.addEventListener("click", clickHandler);
// We want to clean the page if the worker is destroyed
self.port.on("detach", function() {
window.removeEventListener("click", clickHandler);
})
可以随时移除调用worker.destroy()
的worker。就像我说的,你可能想把worker
存储在某个地方,像一个地图,这样你就可以附加脚本,只有当没有任何工人的标签/url。
添加点击监听器到窗口,然后检查event.target
:
function handleClick() {
//try using jquery here. if $ doesnt work try window.$
window.addEventListener('click', intercept, false);
}
function intercept(e) {
//try using jquery here. if $ doesnt work try window.$ or try e.target.ownerDocument.defaultView.$
var elementClicked = e.target;
console.log('elementClicked = ', elementClicked);
elementClicked.style.border = '1px solid red';
}
相关文章:
- Highslide(iframe的侦听器)
- 如何在for循环中添加事件侦听器
- 选项卡侦听器未被来自后台脚本的消息激活
- 未命中服务器发送的事件侦听器
- 如何覆盖原型中的事件侦听器
- 加载侦听器上的函数触发得太早
- 无法将事件侦听器附加到画布
- 如何在d3.js中自定义事件侦听器
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- 事件侦听器未在chrome扩展中的options.js中启动
- IE8更改文本区域上的事件侦听器不工作
- 将事件侦听器添加到文档,而不是签入元素存在,然后添加事件侦听器
- jQuery将侦听器的大小调整为只触发宽度的变化
- 在Firefox插件中注册控制台服务侦听器
- Chrome/Firefox 使事件侦听器断点在停止之前跳过 jQuery 和其他库
- 为什么Firefox说window.event是未定义的?(添加了事件侦听器的调用函数)
- 向所有元素添加单击事件侦听器- Firefox插件
- 如何/是否可以在Firefox Windows触摸桌面中创建与touchstart事件相对应的侦听器
- 使用Firefox SDK的选项卡侦听器
- 窗口.在Firefox中onbeforeunload侦听器不触发标签关闭