如何刷新/重新加载Chrome扩展程序?
我正在开发Chrome 4中的扩展程序(当前为4.0.249.0),它将在状态栏中显示用户的StackOverflow / SuperUser / ServerFault信誉。 我设计了一个选项页面以获取用户的配置文件ID,并将它们保存到localStorage并在扩展中很好地读取它们。 这一切都很好。
问题是我找不到(程序化)的方式来刷新选项保存的扩展名。 我试着调用location.reload();
从扩展页面本身点击右键 - 无济于事。 我进一步追求它,并试图查看Chrome的chrome://extensions/
page用于重新加载扩展的内容,并发现以下代码:
/**
* Handles a 'reload' button getting clicked.
*/
function handleReloadExtension(node) {
// Tell the C++ ExtensionDOMHandler to reload the extension.
chrome.send('reload', [node.extensionId]);
}
将此代码复制到我的事件处理程序中并没有帮助(是的,我尝试用实际代码替换[node.extensionId]
)。 有人可以帮助我以正确的方式做到这一点,或者指出我的扩展代码是否正确? 完成后,我会将扩展程序和源文件放在我的博客上。
chrome.send函数不能被扩展的JavaScript代码访问,像newtab页面,历史和扩展页面这样的页面会使用它来与这些页面的C ++控制器代码进行通信。
您可以将扩展的更新推送给安装它的用户,这在这里描述。 用户的应用程序将在自动更新间隔命中或重新启动浏览器时更新。 但是,您不能以编程方式重新加载用户的扩展。 我认为这会带来安全风险。
现在,最简单的方法,使延长重载本身是调用chrome.runtime.reload()
该功能不需要清单中的任何权限。 要重新加载另一个扩展,请使用chrome.management.setEnabled()
。 它需要“权限”:清单中的[“管理”]。
我只是在扩展中遇到同样的问题。
事实证明,您可以使用chrome.storage.onChanged
监听background.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()
可能会更容易,但是这会减少开销。