我正在编写一个 Chrome 扩展程序,以列出附加到 <a/>
的每个事件处理程序的源代码。当您将鼠标悬停在其上方时标记。
目前,我已经打印出了 href 属性 - $(this).attr("href")
- 这很好用。源代码在github上:http://github.com/grantyb/Google-Chrome-Link-URL-Extension .
当我扩展它来访问事件处理程序时,$(this).data("events")
返回空值。我确信有一个 click()
我的处理程序<a/>
标签,因为当我输出$("a").data("events")
时在我的网页中,它正确列出了处理程序。
看来 jQuery 的 data()
方法正在检查沙盒中的数据,因此我无法从扩展内部访问它。这是有道理的,因为我猜它存储在 jQuery
中全局变量,这显然与 jQuery
不同。位于我的扩展内的全局。
是否有另一种方法可以访问 DOM 中对象的事件处理程序列表。事件处理程序是否存储在 DOM 中?
最佳答案
通过出色的破解解决了!
查看 GitHub 上的代码了解详细信息:http://github.com/grantyb/Google-Chrome-Link-URL-Extension .
内容脚本使用 jQuery 附加 <script>
直接标记到主页(在此处插入疯狂的笑声)。 “寄生虫”脚本对主机页面具有完全可见性,包括 DOM 和 javascript 沙箱,因为它现在是页面的一部分。它获取我需要的数据,将其编码为文本格式,并将其写入我之前准备的元素的属性中。
然后,我坐下来等待 (setTimeout(...,10)) 脚本完成其任务。当我接到回电时,我会自行清理并直接从 DOM 元素中获取文本编码数据。
有没有更简单的方法?这感觉很顽皮。
关于javascript - 如何从 Google Chrome 扩展程序访问网页的事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3227184/