不能使用注入的jQuery

我想将jQuery注入Chrome扩展程序中的网页(带有内容脚本)。

我试试,但有些事让我困惑。

这是我的manifest.json

 { "name": "test", "description": "test content script.", "version": "0.0.1", "background": { "scripts": ["jquery-1.10.2.js", "popup.js"] }, "permissions": ["tabs", "notifications", "http://*/*", "https://*/*"], "browser_action": { "default_title": "test", "default_icon": "icon.png" }, "options_page": "manage.html", "content_scripts": [ { "matches": ["http://*/*", "https://*/*"], "js": ["jquery-1.10.2.js"] } ], "manifest_version": 2 } 

jquery-1.10.2.js

  /*jquery's orign code*/ console.log("end of jquery"); 

我可以看到控制台消息,但我仍然无法使用jQuery。

我写了一个简单的网站,并尝试通过内容脚本包含jQuery,而不是添加标记。

在Dev Tool控制台中,我输入window.jQuery$("li").siblings()

如果在页面中包含jQuery,它可以工作,但如果它注入了内容脚本,它会将jQuery显示为未定义。

为什么会这样?

情况与这个问题非常相似。

内容脚本存在于自己独立的 JavaScript上下文中 。 这样做是为了使扩展程序添加的脚本不与​​页面或彼此共存。

当您打开Dev Tools控制台时,它会显示来自网页所有上下文的控制台消息:页面的上下文,iframe的上下文(也是隔离的)和内容脚本上下文。 这就是您看到日志消息的原因。

但是,虽然它可以一次显示所有消息,但如果您尝试执行某些操作,则必须转到一个上下文。 默认情况下,它是页面的上下文: 就在控制台上方。

要在扩展的上下文中执行某些操作,您需要切换到它:

切换上下文

如果您想为页面上下文提供一些JavaScript,则需要将其作为标记注入页面本身。 看到这个问题 。

我用过这个,工作正常。 也许你的jquery的路径是不正确的。

 "content_scripts": [{ "matches": ["http://*/*", "https://*/*"], "js": ["js/jquery.min.js", "js/socket/socket.io.js","js/socket/client.js"], "run_at": "document_idle" }]