我在将 jQuery 事件绑定到 gmail“body”时遇到问题
$('body').on('click', function(event) {
console.log("Entered function");
});
访问 IMDB.com(例如)并在 Google Chrome 开发者控制台中粘贴上述代码。点击页面后,可以看到控制台上打印出“Entered function”。
但是当我尝试使用 gmail 进行相同操作时,我收到以下消息:
类型错误:对象 # 没有方法“on”
Gmail 发生了什么事?我该如何解决这个问题?
EDIT :-
非 JQuery 版本:
document.addEventListener("click", function() {
console.log("Entered function");
}, false);
就像评论者指出的那样,jQuery 没有随 Gmail 一起加载,这是一个非 jQuery 版本,当您单击 Gmail 时它可以工作,但是当您单击链接(打开其中包含一些链接的电子邮件)时它不会不再工作了。
大多数 DOM 事件(包括单击事件)的调度方式如下:
- Capture phase (from
document
(window
, document
, document.documentElement
, ...) down the tree to the clicked element).
- Bubble phase (from the clicked element up the tree to
document
..., window
).
与 jQuery 绑定的事件总是在#2 冒泡阶段触发。 Gmail似乎绑定了一个事件添加捕获阶段,并调用event.stopPropagation();
当用户点击<a>
元素。此方法会停止事件的传播,因此 jQuery 永远不会知道该事件,因为 #2 永远不会发生。
因此,放弃 jQuery 并使用普通 JavaScript 来绑定事件:
document.addEventListener('click', function(event) {
// Do whatever you want
}, true);
通过设置第三个参数addEventListener to true
,侦听器在捕获阶段触发。
关于 jQuery 错误(来自问题):
Gmail 不加载 jQuery,因此您无法使用它。通常,您会收到 ReferenceError:“$ 未定义”。相反,您看到“TypeError:Object # has no method 'on'”,因为$
被定义为简写document.querySelector当页面未声明时在 Chrome 的开发者工具中$
.
如果您的扩展中包含了 jQuery,则可以通过切换到适当的上下文来使用它。有关更多详细信息,请参阅为什么 jQuery 无法在 Facebook 中加载?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)