代码之家  ›  专栏  ›  技术社区  ›  Grant

如何从Google Chrome扩展访问网页的事件侦听器

  •  0
  • Grant  · 技术社区  · 14 年前

    我正在编写一个Chrome扩展,列出连接到 <a/> 翻滚时贴上标签。

    目前,我已经打印出href属性- $(this).attr("href") -这个很好用。源代码在github上的 http://github.com/grantyb/Google-Chrome-Link-URL-Extension .

    当我将其扩展到访问事件处理程序时, $(this).data("events") 返回null。我肯定有一个 click() 我的 <a/> 标记,因为当我输出 $("a").data("events") 在我的网页中,它正确地列出了处理程序。

    看来jQuery data() 方法是检查沙盒中的数据,所以我无法从扩展内部访问它。这是有道理的,因为我猜它存储在 jQuery 全局变量,这显然与 jQuery 住在我分机里的全球。

    是否有其他方法可以访问DOM中对象的事件处理程序列表。事件处理程序是否存储在DOM中?

    3 回复  |  直到 3 年前
        1
  •  3
  •   Grant    14 年前

    解决了的 用一个很棒的黑客!

    有关详细信息,请查看GitHub上的代码: http://github.com/grantyb/Google-Chrome-Link-URL-Extension .

    内容脚本使用jQuery附加 <script> 直接标记到主机页( 在这里插入疯狂的笑声 )。由于“寄生虫”脚本现在是页面的一部分,“寄生虫”脚本在宿主页面(包括DOM和javascript沙盒)上具有完全的可见性。它获取我需要的数据,将其编码为文本格式,并将其写入我之前准备的元素的属性中。

    然后,我坐下来等待(setTimeout(…,10))脚本完成它的工作。当我接到回电时,我会自己清理,直接从DOM元素中获取文本编码的数据。

    有没有更简单的方法?这感觉很淘气。

        2
  •  2
  •   Wolph    14 年前

    你的整个扩展都是沙盒。可以从扩展访问DOM,但不能从javascript访问。

    交互的唯一方法是修改DOM,使javascript加载到网页中。但您仍将处于沙盒状态,因此无法通过javascript直接与扩展通信。

        3
  •  1
  •   Arnaud Leymet    14 年前

    正如WoLpH所说,您的扩展是沙盒的,无法访问或修改任何网页DOM。

    尽管如此,通过使用 content script message passing :

    • 用于访问/修改网页的内容脚本
    • 用于在分机和网页之间进行通信的消息传递