gpt4 book ai didi

javascript - 如何使用内容脚本进行 onClicked 编程注入(inject)?

转载 作者:行者123 更新时间:2023-12-02 16:29:50 24 4
gpt4 key购买 nike

我创建了一个 Google Chrome Action 扩展程序。它不需要使用弹出页面。它有一个后台持久进程/页面,不断分析页面源数据。但是,这是一个单独的过程,我不想像官方示例那样从后台进行 UI 编程注入(inject)。

我设计了一个在用户页面顶部动态生成 UI(结果)的脚本,该脚本需要在单击“操作”图标时出现。我需要使用内容脚本(而不是背景页面或弹出页面)来进行编程注入(inject)。

但它不会工作,因为内容脚本是一个“孤独的岛屿”,它不与其他扩展程序通信,并且没有对 chrome 的完全访问权限。因此,当在内容脚本中使用以下代码时:

chrome.extension.sendMessage({}, function(response) {
var readyStateCheckInterval = setInterval(function() {
if (document.readyState === "complete") {
clearInterval(readyStateCheckInterval);

chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, {file: "content_script.js"}); }

这是我的 list 文件的一部分:

 "background": {
"scripts": [
"src/bg/background.js"
],
"persistent": true
},
"page_action": {
"default_icon": "icons/icon19.png",
"default_title": "Show my visitors"
},
"permissions": [
"*://*.google.com/*",
"background"
],
"content_scripts": [
{
"matches": [
"*://*.google.com/*"
],
"js": [
"src/inject/inject.js"
]
}
]

它不起作用,因为内容脚本可能无法访问 browserAction.onClicked 方法。单击操作扩展图标时,我确实需要通过使用内容脚本进行编程注入(inject)。有什么建议吗?

最佳答案

事实上,chrome.browserAction.onClicked 不能驻留在内容脚本中。

必须在后台脚本中监听。这就是后台脚本的主要目的:对事件使用react的统一场所。它是如此普遍,以至于 Chrome 甚至引入了一类特殊的背景页面,Event Pages ,对于仅对事件使用react的后台页面。

您需要决定是采用明显注入(inject)途径还是程序化注入(inject)途径。

如果您通过 list 注入(inject)代码,您的脚本将始终被加载,并且您可以使用 chrome.tabs.sendMessage 触发其中的代码。

如果您决定仅在单击时注入(inject)代码,则应从监听器中调用 chrome.tabs.executeScript,就像在代码中所做的那样。同样,如果您需要在两个组件之间进行通信,请使用 Messaging .

再看看 Architecture overview当你在做的时候。

关于javascript - 如何使用内容脚本进行 onClicked 编程注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28409881/

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