由 Chrome 扩展触发的 DOM 事件是不是在主页的上下文中传播?

Posted

技术标签:

【中文标题】由 Chrome 扩展触发的 DOM 事件是不是在主页的上下文中传播?【英文标题】:Are DOM events triggered from a Chrome extension propagated in the main page’s context?由 Chrome 扩展触发的 DOM 事件是否在主页的上下文中传播? 【发布时间】:2013-07-14 01:12:03 【问题描述】:

我正在尝试编写一个 Chrome 扩展程序,以编程方式将点击事件发送到页面上的特定链接。这个特定的链接在我可以通过 Chrome 的网络检查器看到的页面上知道点击事件处理程序。

我在 Chrome 扩展程序的 content_page 脚本中使用 jQuery .click() 发送此点击事件,但看起来处理程序没有触发。当控制台记录 jQuery .click() 调用的结果时,我可以看到预期的返回值正在返回,所以我知道这段代码实际上正在运行。Ch

我知道这个 jQuery 代码可以工作,因为我可以将同一行粘贴到该页面的 Chrome 控制台中并获得我期望的结果。

我是否疯狂地认为我可以从扩展的content_page 触发 DOM 事件?我知道content_page 在单独的环境中执行,但我很确定触发的 DOM 事件会在两个环境中冒泡。

(如果我没疯,你会怎么调试?)

【问题讨论】:

你能举个小例子来说明这个问题吗? 【参考方案1】:

答案是肯定的——点击事件 do 传播,但是当我使用 jQuery 定位想要发送 .click() 的 DOM 元素时发生了一些奇怪的事情,但它在使用原生 DOM 时有效像getElementsByClassName()这样的遍历函数。

谜团解开:只需使用 vanillaJS 方法在 DOM 元素本身上调用 click() 而不是 jQuery 包装的版本。

【讨论】:

使用DOM遍历方法并没有解决问题。它是通过使用 VanillaJS 的 click() 方法而不是 jQuery 的 .click() 来解决的。 $('body')[0].click(); 也可以。

以上是关于由 Chrome 扩展触发的 DOM 事件是不是在主页的上下文中传播?的主要内容,如果未能解决你的问题,请参考以下文章

来自 Chrome 扩展的 Outlook 日历输入字段 DOM 操作

元素添加到 DOM 时触发事件:JQuery Livequery Equivalent in 1.7

我无法影响“拒绝执行内联事件处理程序”错误的 DOM 原因。 -Chrome 扩展 [重复]

DOM事件简介

chrome扩展跟踪前端JavaScript,该JavaScript使用DOM/jQueryAPI在运行时操作html-DOM元素(例如,更改样式、附加事件侦听器)。

Chrome 扩展:在加载的 Dom 上注入脚本