如何让executeScript在安装扩展程序之前加载的选项卡上运行?

时间:2011-06-27 14:31:53

标签: google-chrome-extension

我的扩展程序通过单击pageAction按钮将JavaScript注入HTML文档。

当用户在安装扩展程序后导航到页面时,此方法可以正常工作。

首次安装扩展程序时,我可以显示pageAction按钮并侦听点击次数,但执行脚本调用无提示失败。

似乎executeScript函数对安装扩展程序之前加载的选项卡没有特权。

有解决这个问题的方法吗?

1 个答案:

答案 0 :(得分:1)

我的Reload All Tabs扩展名存在完全相同的问题。基本上,当首次安装扩展时,除非重新加载选项卡,否则用户无法使用它。如您所知,自动重新加载用户标签的用户体验非常糟糕,因为他们可能正在做一些事情,他们会松开它。我最终使用executeScript,因为它对用户来说确实是不可见的。您可以在GitHub上看到源代码:

https://github.com/mohamedmansour/reload-all-tabs-extension/blob/master/js/reload_controller.js#L96

基本上我使用该方法定位此问题的安装Detect Chrome extension first run / update,并使用chrome.windows.getAllchrome.tabs.getAllInWindowchrome.tabs.executeScript准备首次安装时的扩展程序

chrome.windows.getAll({ populate: true }, function(windows) {
  for (var w = 0; w < windows.length; w++) {
    var tabs = windows[w].tabs;
    for (var t = 0; t < tabs.length; t++) {
      var tab = tabs[t];
      // Only inject in web pages.
      if (tab.url.indexOf('http') == 0) {
        chrome.tabs.executeScript(tab.id, { file: 'content_script.js', allFrames: true });
      }
    }
  }
});

如果executeScript不起作用,请在http://crbug.com/new提交一个错误,开发人员可以查看它。就我而言,它运作得很好。

希望有所帮助!