gpt4 book ai didi

javascript - JQuery 和 Chrome 扩展

转载 作者:搜寻专家 更新时间:2023-10-31 22:02:58 24 4
gpt4 key购买 nike

我正在尝试开发一个测试版 chrome 扩展以查看 JQuery 如何与 chrome 扩展一起使用。根据提供的代码,我认为它应该将弹出窗口的背景更改为黄色。

我尝试使用内容脚本和背景加载 jquery.js。当我通过后台脚本命令加载它时,它显示 jquery.js 已加载。

这是我的文件:

list .json

    {
"name": "Hello World!",
"version": "1.0",
"manifest_version": 2,
"description": "My first Chrome extension.",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"content_scripts": [
{
"matches": ["http://www.google.com/*"],
"js": ["jquery.js", "content.js"]
}
]
}

弹出窗口

    <html>
<head>
<script src='jquery.js'></script>
<script src='content.js'></script>
</head>
</html>

内容.js

$('a').css({'background-color': 'yellow'});

我的扩展文件夹中也有 jquery.js。如果有人给我其他东西来尝试让这个工作正常,或者可以向我展示一个链接 jquery 的 chrome 扩展的非常好的工作示例,那就太好了!

最佳答案

您没有将不应该放在一起的东西混在一起。

有一件事你做错了:
由于您不希望在单击浏览器操作按钮时出现弹出窗口,因此不应指定“默认弹出窗口”:

...
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html" // <-- this line should go away
},
...

话虽如此,解决问题的最佳方法 (imo) 如下:

  1. 让你的后台页面(或者更好的 event-page )监听 chrome.browserAction.onClicked 事件。
    (请注意,为了触发事件,必须不设置默认弹出窗口。)

  2. 发生这种情况时,使用 programmatic injection 使用 chrome.tabs.executeScriptjquery.min.jscontent.js 注入(inject)到事件选项卡的页面中.

  3. 为了使上述步骤成为可能,您还必须声明必要的 permissions ,即 “tabs” 和 URL match-patterns 您的扩展应该可以访问的页面(例如 "http://*/*""https://*/*" 到可以访问所有使用 httphttps 方案的页面。

我还建议,好好看看 manifest specification 以便熟悉可用字段和可能的值。


最后,一些演示源代码可以帮助您入门(我知道所有这些信息一下子就会让人不知所措):

扩展文件夹结构:

       _______________LinkHighlighter_______________
| | |
manifest.json img js
| |__background.js
icon<XX>.png(*) |__content.js
|__jquery.min.js
(*): <XX> = 16, 19, 38, 48, 128

list .json:

{
"manifest_version": 2,

"name": "Link Highlighter",
"version": "1.0",
"description": "...",
"icons": {
"16": "img/icon16.png",
"48": "img/icon48.png",
"128": "img/icon128.png"
},

"browser_action": {
"default_title": "Link Highlighter",
"default_icon": {
"19": "img/icon19.png",
"38": "img/icon38.png"
}
},
"background": {
"persistent": false,
"scripts": ["js/background.js"]
},

"permissions": [
"tabs",
"http://*/*",
"https://*/*"
]
}

background.js:

// When the user clicks the browser-action button...
chrome.browserAction.onClicked.addListener(function(tab) {
// ...inject 'jquery.min.js' and...
chrome.tabs.executeScript(tab.id, {
file: "js/jquery.min.js",
allFrames: true,
runAt: "document_idle"
});
// ...inject 'content.js' into the active tab's page
chrome.tabs.executeScript(tab.id, {
file: "js/content.js",
allFrames: true,
runAt: "document_idle"
});
});

content.js:

$("a").css({ "background-color": "yellow" });

如果您还有其他疑问/问题,请随时回来:)


为了完整性...
...让我提一下还有其他可能的方法,例如:

  1. 使用页面操作而不是浏览器操作。

  2. 用您的内容脚本注入(inject)每个页面,并通过从后台页面到内容脚本的消息传递触发突出显示。

关于javascript - JQuery 和 Chrome 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19458523/

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