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

标签 google-chrome-extension

我有一个 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/

相关文章:

iframe - Chrome 仅在某些网站上强制在框架上使用白色背景

google-chrome - 如何调试 page_action chrome 扩展

javascript - 动态添加文件到 Chrome 扩展程序?

javascript - chrome.webRequest.onBeforeRedirect 不停止重定向?

javascript - Chrome 扩展 : Redirect at specific time

javascript - Chrome 扩展 - navigator.mediaDevices.getUserMedia() 失败,出现 NotAllowedError : Failed due to shutdown

google-chrome-extension - Dart中的Chrome内容脚本

javascript - 处理异步 JavaScript Chrome 控制台错误

google-chrome - chrome.webNavigation.onTabReplaced 不触发

google-chrome-extension - chrome.tabs.highlight 给出错误 "No tab at index"