如何自动重新加载chrome扩展?

时间:2013-12-23 03:40:51

标签: javascript google-chrome google-chrome-extension

我正在开发一个chrome扩展程序,我发现有重复无用的手动重新加载工作。

保存文件时,必须刷新chrome:\\extensions页面才能让浏览器重新加载扩展程序。然后,您必须重新加载测试页以查看对文件的更改是否生效。

我是Chrome扩展程序开发的新手。有没有办法减少重复工作?我也很好奇Chrome扩展开发工作流程的最佳实践是什么。

英语不好,随意纠正。

3 个答案:

答案 0 :(得分:11)

扩展程序可以通过调用 chrome.runtime.reload() 重新加载,因此触发扩展程序就可以了。

一种对我有用的方法是观看标签 onUpdated 事件,并查找特定的网址(您已提出),例如: http://localhost/reloadX?id=...

这是示例代码(放在 background.js 中):

var myReloadURL = 'http://localhost/reloadX?id='
                  + chrome.i18n.getMessage('@@extension_id');

chrome.tabs.onUpdated.addListener(function(tabId, info, tab) {
    if (info.url === myReloadURL) {
        chrome.tabs.remove(tabId);
        chrome.runtime.reload();
    }
});

其他权限(在 manifest.json 中声明):

...
"permissions": [
    ...
    "tabs",
    "http://localhost/reloadX?id=*"

myReloadURL是任意的,可以是任何URL,只是不必是真正的URL,否则资源将无法访问。

现在,为了重新加载您的扩展程序,您需要在Chrome中打开以下地址:
http://localhost/reloadX?id=<your_extension_id>

由您决定如何在保存时触发该操作。它可能是编辑器中的on-save钩子,一个自定义的grunt-watch任务(因为你似乎熟悉grunt)等。


(顺便说一下,您无需重新加载chrome://extensions页面。只需重新加载扩展程序即可。)

答案 1 :(得分:0)

我必须揭示这一点,因为对于假人(-> miself)而言,它比gkalpak的解决方案要复杂得多,但是基于此。这使用普通书签重新加载Chrome扩展程序。 作为前提条件,Apache必须在端口80上运行。

  1. 在书签栏上使用实际运行的localhost URL:'http://localhost/subdir/reload_dummy.php'创建一个书签。 该php文件为空。您可以将url更改为网络上任何有效的url以符合您的需求。
  2. 将webRequest权限项添加到manifest.json:

    “权限”:[ “ webRequest”,“标签”],

然后将一些代码复制到background.js:

var reloadURL = 'http://localhost/subdir/reload_dummy.php';
var cbBeforeRequest = function (info) {

    if (info.url === reloadURL) {
          chrome.runtime.reload();
           alert("HiiHaa!:" + info.url);
    }

}
var filters = {urls: [reloadURL]};
chrome.webRequest.onBeforeRequest.addListener(cbBeforeRequest, filters);

答案 2 :(得分:-1)

我构建Clerc以便与任何LiveReload服务器一起开箱即用。只需在构建过程中包含任何兼容LiveReload的观察程序,Clerc将负责重新加载。