如何刷新/重新加载Chrome扩展程序?

时间:2009-11-19 08:46:06

标签: javascript google-chrome

我正在开发Chrome 4(目前为4.0.249.0)的扩展程序,该扩展程序将在状态栏中显示用户的StackOverflow / SuperUser / ServerFault信誉。我设计了一个选项页面来获取用户的个人资料ID,然后将它们保存到localStorage并在扩展中很好地阅读它们。一切都很好。
问题是我找不到一种(程序化的)方法来在保存选项时刷新扩展名。我试图在点击它时从扩展页面调用location.reload(); - 无济于事。我进一步追求它,并尝试查看Chrome的chrome://extensions/页面重新加载扩展程序的内容,并找到了此代码:

/**
 * Handles a 'reload' button getting clicked.
 */
function handleReloadExtension(node) {
  // Tell the C++ ExtensionDOMHandler to reload the extension.
  chrome.send('reload', [node.extensionId]);
}

将此代码复制到我的事件处理程序没有帮助(是的,我尝试用实际代码替换[node.extensionId])。有人可以帮助我以正确的方式做这件事,或者指点我正确执行此操作的扩展代码吗?完成后,我会将扩展及其来源放在我的博客上。

5 个答案:

答案 0 :(得分:33)

现在,对重新加载进行扩展的最简单方法是调用chrome.runtime.reload()。此功能不需要清单中的任何权限。 要重新加载另一个扩展名,请使用chrome.management.setEnabled()。它需要“permissions”:清单中的[“management”]

答案 1 :(得分:5)

扩展程序的javascript代码无法访问chrome.send函数,newtab页面,历史记录和扩展页面等页面使用它来与这些页面的C ++控制器代码进行通信。

您可以将扩展程序的更新推送给安装了该扩展程序的用户,如here所述。一旦命中自动更新间隔或重新启动浏览器,将更新用户的应用程序。但是,您无法以编程方式重新加载用户的扩展。我认为这会带来安全隐患。

答案 2 :(得分:3)

我在an extension时遇到了同样的问题。

事实证明,您可以使用chrome.storage.onChangedbackground.js内监听存储更改,并执行刷新逻辑。

例如:

// Perform a reload any time the user clicks "Save"
chrome.storage.onChanged.addListener(function(changes, namespace) {
  chrome.storage.sync.get({
    profileId: 0
  }, function(items) {

    // Update status bar text here

  });
});

您还可以通过考虑changes参数,以这种方式重新加载扩展程序的部分chrome.runtime.reload()可能会更容易,但这会减少开销。

答案 3 :(得分:2)

window.location.reload()适合我

我正在使用chrome 6.x,因此可能会在较新版本中修复

答案 4 :(得分:0)

对于所有未来的Google员工-浏览器扩展规范现在包括runtime.reload()-https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/reload

对于Chrome,您可能需要使用chrome.runtime.reload()(但我会通过Mozilla出色的webextension-polyfill处理此类情况)。