Javascript I';我试图让jquery在我的chrome扩展的background.js中工作,结果它赢了;不行。为什么?
我已经读了很多关于jQuery和后台页面的堆栈溢出问题,只是不理解参与规则。我不知道他们是如何互动的。有人能告诉我为什么这个代码不起作用吗Javascript I';我试图让jquery在我的chrome扩展的background.js中工作,结果它赢了;不行。为什么?,javascript,jquery,google-chrome,google-chrome-extension,Javascript,Jquery,Google Chrome,Google Chrome Extension,我已经读了很多关于jQuery和后台页面的堆栈溢出问题,只是不理解参与规则。我不知道他们是如何互动的。有人能告诉我为什么这个代码不起作用吗 manifest.json { "name": "test 1", "description": "testing jquery", "version": "2.0", "permissions": [ "activeTab" ], "background": { "scripts": [ "jquery-2.1.1
manifest.json
{
"name": "test 1",
"description": "testing jquery",
"version": "2.0",
"permissions": [
"activeTab"
],
"background": {
"scripts": [ "jquery-2.1.1.js", "background.js"],
"persistent": false
},
"browser_action": {
"default_title": "test"
},
"manifest_version": 2
}
上传扩展名时,我不会忘记包含jQuery文件
background.js
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(
{ code: 'console.log("this works");'},
{ code: '$( document ).ready(function() { console.log( "but this does not work :(" ); });' }
);
});
请记住,我熟悉如何使用内容脚本使用jQuery,但这些脚本的问题是
chrome.******
命令不起作用
请帮忙 您正在将jQuery正确加载到后台页面。如果要在其代码中使用
$(document).ready()
,则它将起作用
问题是,使用executeScript
时,指定的代码不会在与background.js
相同的上下文中执行。将创建一个全新的JS上下文,并将其附加到相关选项卡上,而该上下文中没有jQuery(顺便说一句,即使选项卡的上下文本身也有jQuery,请参见)
而且,你打错电话了。其论点是:
- 整数(可选)
tabId
- 对象<代码>详细信息
- 函数(可选)
回调
因此,要解决这个问题,首先需要在执行上下文中注入jQuery,然后再注入代码。您需要链接2个调用,以确保它们以正确的顺序执行
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(
tab.id,
{ file: 'jquery-2.1.1.js' },
function() {
chrome.tabs.executeScript(
tab.id,
{ code: '$( document ).ready(function() { console.log( "This works now" ); });' }
);
}
);
});
chrome.tabs.executeScript
将在网页上下文中执行代码。因此,您首先需要将jQuery注入到网页中(或者使用现有的jQuery,如果可用的话),我的意思是,jQuery应该在后台页面中工作(但这不是您想要的)