gpt4 book ai didi

javascript - 我试图让 jquery 在我的 chrome 扩展的 background.js 中工作,但它不起作用。为什么?

转载 作者:行者123 更新时间:2023-12-03 11:42:07 24 4
gpt4 key购买 nike

我已经阅读了很多有关 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(即使选项卡的上下文本身有它,顺便说一下,请参阅 isolated context )。

此外,您正在调用 executeScript错误的。它的论点是:

  • 整数(可选)tabId
  • 对象详细信息
  • 函数(可选)回调

您正在使用两个对象调用它;它不是那样工作的。

<小时/>

因此,要解决此问题,您需要首先在执行上下文中注入(inject) jQuery,然后再注入(inject)代码。您需要链接 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" ); });' }
);
}
);
});

关于javascript - 我试图让 jquery 在我的 chrome 扩展的 background.js 中工作,但它不起作用。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26230446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com