是否可以在 Firefox 的 Greasemonkey 代码(EcmaScript 5.1 严格模式)中检测特定 DOM 事件是否绑定了任何事件处理程序(包括浏览器默认事件处理) ?
到目前为止,我设法在选择文本时设法取消了点击事件处理,但是我想在以下所有情况下取消事件处理,而单击事件触发默认操作:
- 选择页面上的文本
- 显示上下文菜单(即右键单击)
- 跟随一个链接(左键单击
<a>
) - 表单元素被操作(文本框获得焦点,光标开始闪烁,单选按钮被选中,...)
- 其他一些处理事件的 JavaScript 代码(例如显示弹出帮助对话框)
是否有一个包罗万象的机制,还是我需要在我的代码中明确拼写所有情况?
以下代码是我如何检测到选择发生:
var toggleHighlight = function(){
var oldTargt;
return function(e){
targt = e.target;
sel = window.getSelection();
if (!sel.isCollapsed && sel.containsNode(targt, true)) {
return;
}
...
oldTargt = targt;
}()
document.addEventListener('click', toggleHighlight);
注意:
- 我不想停止使用我的脚本传播,如果事件将被传播到其他处理程序,我想停止我的脚本。
- 如果JQuery-event-handlers-only解决方案没有捕获默认浏览器事件处理程序
,我对它们不感兴趣。- 如果此功能确实不存在,请引用一些文章或博客,而不仅仅是您自己的观点。
- 欢迎提出特别建议,但我主要对通用解决方案的存在感兴趣。
更新:可接受的解决方案包括:
if
我需要检查的详尽(ish)条件列表- 从 Firefox 插件访问的非 JavaScript 方式
- 解释 Firefox 如何知道单击有效
<a>
元素应触发重新加载新 URL + 如何无法从 javascript/plugins 访问此逻辑