![](/img/trans.png)
[英]My “background.js” code to get the selected chrome tabs url is not working properly in my chrome extension
[英]I'm trying to get jquery working in the background.js of my chrome extension and it won't work. why?
我已经阅读了很多有关jQuery和背景页面的堆栈溢出问题,但是根本不了解参与规则。 我不知道他们是如何互动的。 有人可以告诉我为什么此代码不起作用吗?
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,请参见隔离的上下文 )。
此外,您在调用executeScript
错误。 它的参数是:
tabId
details
callback
您正在用两个对象调用它; 它不是那样工作的。
因此,要解决此问题,您需要先在该执行上下文中注入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" ); });' }
);
}
);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.