我有一个chrome扩展程序,可以将iframe插入每个打开的标签页。我的background.js中有一个chrome.runtime.onInstalled侦听器,该侦听器手动注入所需的脚本,如下所示(API的详细信息位于:http : //developer.chrome.com/extensions/runtime.html#event-onInstalled):
background.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]
});
}
}
});
}
});
};
当我第一次安装扩展程序时,这工作正常。扩展程序更新后,我也想这样做。如果在更新时也运行相同的脚本,则看不到新的iframe插入。不仅如此,如果我尝试在更新后将消息发送到我的内容脚本,则所有消息都不会传递到内容脚本。我已经看到其他人也在SO上遇到了同样的问题(Chrome:runtime.onInstalled上的message content-script)。chrome扩展程序更新后,删除旧内容脚本并注入新内容脚本的正确方法是什么?
扩展程序更新后,Chrome会自动切断所有“旧”内容脚本与后台页面的对话,并且如果旧内容脚本确实尝试与运行时进行通信,它们也会引发异常。这是我所缺少的。在chrome.runtime.onInstalled
中bg.js
,我所做的就是调用与问题中发布的方法相同的方法。这会注入另一个与正确的运行时进行对话的iframe。在某个时间点,旧的内容脚本会尝试与运行时进行通信,该运行时将失败。我发现了该异常,只是清除了旧的内容脚本。另请注意,每个iframe都注入了自己的“孤立世界”(此处介绍了孤立世界:http://www.youtube.com/watch?v = laLudeUmXHM),因此新注入的iframe无法清除旧的iframe。
希望这对以后的人有所帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句