gpt4 book ai didi

google-chrome-extension - 更新后重新注入(inject)内容脚本

转载 作者:行者123 更新时间:2023-12-02 21:51:46 24 4
gpt4 key购买 nike

我有一个 chrome 扩展,它将 iframe 注入(inject)每个打开的选项卡中。我的 background.js 中有一个 chrome.runtime.onInstalled 监听器,它手动注入(inject)所需的脚本,如下所示(此处的 API 详细信息: http://developer.chrome.com/extensions/runtime.html#event-onInstalled ):

背景.js

  var injectIframeInAllTabs = function(){
console.log("reinject content scripts into all tabs");
var manifest = chrome.app.getDetails();
chrome.windows.getAll({},function(windows){
for( var win in windows ){
chrome.tabs.getAllInWindow(win.id, function reloadTabs(tabs) {
for (var i in tabs) {
var scripts = manifest.content_scripts[0].js;
console.log("content scripts ", scripts);
var k = 0, s = scripts.length;
for( ; k < s; k++ ) {
chrome.tabs.executeScript(tabs[i].id, {
file: scripts[k]
});
}

}
});
}
});
};

当我第一次安装扩展时,这工作正常。我想在更新我的扩展时执行相同的操作。如果我在更新时也运行相同的脚本,我不会看到注入(inject)新的 iframe。不仅如此,如果我尝试在更新后向内容脚本发送消息,则没有任何消息会发送到内容脚本。我看到其他人也在 SO ( Chrome: message content-script on runtime.onInstalled ) 上遇到了同样的问题。 Chrome 扩展更新后删除旧内容脚本并注入(inject)新内容脚本的正确方法是什么?

最佳答案

更新扩展程序时,Chrome 会自动切断所有“旧”内容脚本与后台页面的通信,并且如果旧内容脚本确实尝试与运行时通信,它们也会引发异常。这对我来说是缺失的一 block 。我所做的只是在 bg.jschrome.runtime.onInstalled 中,调用问题中发布的相同方法。这会注入(inject)另一个与正确的运行时对话的 iframe。在某个时间点,旧的内容脚本尝试与运行时通信,但失败了。我捕获了该异常并删除了旧的内容脚本。另请注意,每个 iframe 都被注入(inject)到自己的“隔离世界”(隔离世界解释如下: http://www.youtube.com/watch?v=laLudeUmXHM ),因此新注入(inject)的 iframe 无法清除旧的挥之不去的 iframe。

希望这对将来的人有帮助!

关于google-chrome-extension - 更新后重新注入(inject)内容脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18495615/

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