gpt4 book ai didi

google-chrome-extension - 升级或安装后 Chrome 扩展程序内容脚本重新注入(inject)

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

安装或升级我正在处理的 Chrome 扩展程序后,不会重新注入(inject)内容脚本(在 list 中指定),因此需要刷新页面才能使扩展程序正常工作。有没有办法强制再次注入(inject)脚本?

我相信我可以通过从 list 中删除它们,然后处理要在后台页面中注入(inject)的页面,以编程方式再次注入(inject)它们,但这不是一个好的解决方案。

我不想自动刷新用户的选项卡,因为这可能会丢失一些数据。当您安装或升级扩展程序时,Safari 会自动刷新所有页面。

最佳答案

有一种方法可以让内容脚本繁重的扩展在升级后继续运行,并使其在安装后立即运行。

安装/升级

安装方法是简单地遍历所有窗口中的所有选项卡,并以编程方式将一些脚本注入(inject)具有匹配 URL 的选项卡中。

list V3

manifest.json:

"background": {"service_worker": "background.js"},
"permissions": ["scripting"],
"host_permissions": ["<all_urls>"],

这些 host_permissions 应与内容脚本的匹配相同。

背景.js:

chrome.runtime.onInstalled.addListener(async () => {
for (const cs of chrome.runtime.getManifest().content_scripts) {
for (const tab of await chrome.tabs.query({url: cs.matches})) {
chrome.scripting.executeScript({
target: {tabId: tab.id},
files: cs.js,
});
}
}
});

这是一个不处理框架的简化示例。您可以使用getAllFrames API 并自行匹配 URL,请参阅 matching patterns 的文档.

list V2

显然,您必须在 background page 中执行此操作或event page在manifest.json中声明的脚本:

"background": {
"scripts": ["background.js"]
},

背景.js:

// Add a `manifest` property to the `chrome` object.
chrome.manifest = chrome.runtime.getManifest();

var injectIntoTab = function (tab) {
// You could iterate through the content scripts here
var scripts = chrome.manifest.content_scripts[0].js;
var i = 0, s = scripts.length;
for( ; i < s; i++ ) {
chrome.tabs.executeScript(tab.id, {
file: scripts[i]
});
}
}

// Get all windows
chrome.windows.getAll({
populate: true
}, function (windows) {
var i = 0, w = windows.length, currentWindow;
for( ; i < w; i++ ) {
currentWindow = windows[i];
var j = 0, t = currentWindow.tabs.length, currentTab;
for( ; j < t; j++ ) {
currentTab = currentWindow.tabs[j];
// Skip chrome:// and https:// pages
if( ! currentTab.url.match(/(chrome|https):\/\//gi) ) {
injectIntoTab(currentTab);
}
}
}
});

历史琐事

在古老的 Chrome 26 及更早版本中,内容脚本可以恢复与后台脚本的连接。已修复http://crbug.com/168263 2013 年。您可以在本答案的早期修订版中看到此技巧的示例。

关于google-chrome-extension - 升级或安装后 Chrome 扩展程序内容脚本重新注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10994324/

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