開いているすべてのタブに 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: message content-script on runtime.onInstalled )で同じ問題が発生している他の人も見ました。古いコンテンツ スクリプトを削除し、Chrome 拡張機能の更新後に新しいコンテンツ スクリプトを挿入する正しい方法は何ですか?