【问题标题】:Use existing jQuery in Chrome extension content script?在 Chrome 扩展内容脚本中使用现有的 jQuery?
【发布时间】:2016-08-25 17:22:25
【问题描述】:

我发现的一切似乎都涉及注入 jQuery,但我知道页面上已经存在 jQuery(浏览器 JS 控制台让我可以使用它)。

我有一个后台脚本正在向我的内容脚本发送消息,该脚本正在运行该功能。当该函数执行时,我得到:

runtime.onMessage 的事件处理程序中的错误:ReferenceError:jQuery 没有定义

(我已经尝试过 $ 和 jQuery 引用)

任何想法为什么我不能从内容脚本访问现有的 jquery 对象?

【问题讨论】:

  • 如果您将代码注入网页,您的代码需要等待 jquery init,然后它应该可以工作。但是,如果您尝试在扩展代码中的页面中使用 jquery,它将无法正常工作,因为 chrome 不会与您的扩展共享网页脚本。
  • @ZigMandel 不同意副本。
  • @xan 为什么?该案例已涵盖该副本。它是一个常见的 jquery 副本。
  • @ZigMandel 问题是关于“为什么不能使用页面的版本”,而不是“我如何在内容脚本中使用 jQuery”。为什么,而不是如何。

标签: javascript jquery google-chrome google-chrome-extension sendmessage


【解决方案1】:

这是因为设计的内容脚本不允许访问页面定义的变量/函数

https://developer.chrome.com/extensions/content_scripts

但是,内容脚本有一些限制。他们不能:

  • 使用 chrome.* API,但以下情况除外:
    • 扩展(getURL、inIncognitoContext、lastError、onRequest、sendRequest)
    • i18n
    • 运行时(connect、getManifest、getURL、id、onConnect、onMessage、sendMessage)
    • 存储
  • 使用由其扩展页面定义的变量或函数
  • 使用网页或其他内容脚本定义的变量或函数

所以如果你想使用某个库,你的扩展必须注入它

【讨论】:

  • 嗯,谢谢,这很有帮助。我在清单中的 content_scripts 中添加了一个本地 jquery,现在我可以在准备好的文档时向 dom 添加一个 div,但是当我从我的扩展弹出窗口中单击一个按钮时,它会发送一条消息以在同一个内容脚本中执行一个函数,它仍然抱怨 jquery 和 $ 不存在。这是否与最后几点有关?即使它是一个内容脚本,因为它来自后台 JS 的消息......它缺少上下文?
  • @Kaitlyn 从你的解释中很难说;在这一点上,一个新问题可能会更好。
猜你喜欢
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 2017-04-22
  • 2023-02-14
  • 2021-06-15
  • 1970-01-01
相关资源
最近更新 更多