在Chrome中更新Greasemonkey脚本而不需要重新安装?

11
我希望能像在Firefox中那样,编辑后保存并刷新页面后就能看到更改。每次都需要重新安装,这很麻烦,你有什么好的想法吗?
4个回答

13
是的,有一种方法可以做到这一点。使用从这个绝妙的答案中采用的方法,您可以直接编辑脚本,并点击“重新加载”链接以使更改生效。
这种方法的额外好处是,Chrome的扩展文件夹1不会被难以理解的文件夹和文件名所淹没,而且您可以轻松找到要调整的脚本。
以下是如何设置工作环境以允许简单的脚本更新:
  1. 创建一个方便您的目录,并且不是Chrome通常查找扩展的地方1。例如,创建:C:\MyChromeScripts\
    以后,所有您的脚本都将驻留在此处。
  2. 为每个脚本创建自己的子目录。例如,Script_1Script_2等。
  3. 每个子目录应包含其脚本,例如MyScript1.user.js,以及该脚本使用的任何文件。
  4. 现在是秘密酱的时候了…您还必须在该子目录中创建一个清单文件,它必须命名为:manifest.json
  5. 最少的示例内容:

    {
        "manifest_version": 2,
        "content_scripts": [ {
            "exclude_globs":    [  ],
            "include_globs":    [ "*" ],
            "js":               [ "MyScript1.user.js" ],
            "matches":          [   "https://stackoverflow.com/*",
                                    "https://stackoverflow.com/*"
                                ]
        } ],
        "description":  "This script does X, Y, and Z.",
        "name":         "My script number 1",
        "version":      "1"
    }
    


  6. 现在,在Chrome的扩展程序管理器中(URL=chrome://extensions/),展开开发者模式

  7. 点击加载已解压的扩展程序...按钮。

  8. 对于文件夹,请粘贴您的脚本的文件夹,例如:
    C:\MyChromeScripts\Script_1

  9. 您的脚本将被安装并运行。

  10. 保持扩展程序页面打开。现在,当您保存任何更改到您的*.js文件时,请点击重新加载链接以立即生效。

  11. 享受!



1 默认情况下,扩展程序的文件夹为:

Windows XP:
C:\Documents and Settings\***{username}***\Local Settings\Application Data\Google\Chrome\User Data\Default
Windows Vista: C:\Users\***{username}***\AppData\Local\Google\Chrome\User Data\Default
Windows 7: C:\Users\***{username}***\AppData\Local\Google\Chrome\User Data\Default

虽然您可以通过使用--user-data-dir=选项来更改它。


这很棒,有没有办法监视目录呢?我仍然需要返回到扩展页面进行导航。 - Bartlomiej Lewandowski
@BartlomiejLewandowski,我不知道有没有,但自从Chrome破坏了本地用户脚本以来,我就没有跟上Chrome的变化。 - Brock Adams

2
如果您有一个可以导入修改文件的服务器,那么您就可以这样做。就像这样:
// a function that loads jQuery and calls a callback function when jQuery has finished loading
function addJQuery(callback) {
  var script = document.createElement("script");
  script.setAttribute("src", "http://server.url/Custom/jquery.min.js");
  script.addEventListener('load', function() {
    var script = document.createElement("script");
    script.textContent = "(" + callback.toString() + ")();";
    document.body.appendChild(script);
  }, false);
  document.body.appendChild(script);
}

function addScript(callback) {
  var script = document.createElement("script");
  script.setAttribute("src", "http://server.url/Custom/Custom script.js");
  script.addEventListener('load', function() {
    var script = document.createElement("script");
    script.textContent = "(" + callback.toString() + ")();";
    document.body.appendChild(script);
  }, false);
  document.body.appendChild(script);
}

// load jQuery and execute the init function
addJQuery(addScript);

这会先加载jQuery,然后是我的自定义脚本,当我运行网页时,它总是重新加载整个脚本。

也许这对你有帮助。


0

一个简单的方法是使用两个文件:

  • 一个带有GM头的userscript.user.js,它加载script.js。您可以让它每天清除缓存(告诉它加载添加了随机查询字符串的script.js
  • script.js包含实际脚本。

例如,我在这里做到了这一点

//#!userscript.user.js

// ==UserScript==
//GM headers
// ==/UserScript==


(function(){
     var d=new Date();
     var script = document.createElement("script");
     script.type = "text/javascript";
     script.src="script.js?purge="+d.getMonth()+""+d.getDay(); //appends a new query string every day. This evades browser cache
     document.body.appendChild(script); //you can append to `head` as well, I used body here sine I needed jQuery already loaded
})();

脚本加载 script.js?purge=xyz,其中 xyz 取决于日期。清除查询字符串确保脚本仅被缓存一天,不会更长时间——到了第二天,它将重新加载。对于开发使用,"script.js?purge="+Math.random() 更好。但是,如果脚本在您的本地机器上,则无需担心自己的缓存。
现在,如果您更改了 script.js,明天每个人都将使用更新的版本。

0

如果您不想重新安装脚本,可以重启 Chrome。
这样应该会使您的更改生效。

我同意这很烦人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接