Google Chrome中的用户脚本调试

时间:2009-10-19 21:52:09

标签: google-chrome greasemonkey userscripts

在Chrome中调试自定义用户脚本(aka Greasemonkey)的最佳方法是什么?有没有办法在开发人员工具中启用用户脚本跟踪?

3 个答案:

答案 0 :(得分:9)

您想要什么样的调试?就像Alex所说的那样,用户脚本将在与调试页面本身相同的上下文中列出。如果您转到开发人员工具中的“脚本”选项卡,您将看到一个带有下拉列表的栏,您可以选择要调试的相应javascript文件。此类脚本应具有类似chrome-extension://<hash>/<script file>.js的网址。这些脚本还将登录到它们嵌入的页面的控制台。

此外,如果要为所有页面登录相同的位置,可以尝试使用用户脚本作为内容脚本将脚本构建为完整的Chrome扩展。然后,您可以将内容脚本中的消息发送到后台页面并在那里登录。例如,如果这是您的内容脚本:

function log(text) {
  chrome.extension.sendRequest({'action' : 'log', 'text' : text}, function() {});
};
log("Content script loaded: " + window.location.href);

这是你的背景页面:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <script>
      function onRequest(request, sender, callback) {
        if (request.action && request.action == 'log') {
          console.log(request.text);
        }
      };

      chrome.extension.onRequest.addListener(onRequest);
    </script>
  </body>
</html>

您会在后台页面的日志中看到内容脚本的每次加载。

答案 1 :(得分:3)

我在脚本中使用以下功能来实现跨浏览器的GM Api兼容性:

function testGM() {
var isGM = typeof GM_getValue != 'undefined' && typeof GM_getValue('a', 'b') != 'undefined';
if(typeof(unsafeWindow) == 'undefined') { unsafeWindow = window; }
if(!isGM) { log = function(msg) { try { unsafeWindow.console.log(msg); } catch(e) {} }; } else { log = GM_log; }
if(window.opera) log = opera.postError;
setValue = isGM ? GM_setValue : function (name, value) { return localStorage.setItem(name, value) };
getValue = isGM ? GM_getValue : function(name, def){ var s = localStorage.getItem(name); return s == null ? def : s };
}
testGM();

不是我的。这是礼貌sizzemctwizzle @ userscripts.org

我只使用log,getValue&amp;截至目前的setValue,因此只有这个函数中的树 您还可以查看他的guide 或者您也可以结帐GIJoe's cross-browser GM Api

答案 2 :(得分:0)

您可以使用较小的脚本将自定义调试脚本实际注入页面。此时,您将在开发人员工具中获得相同的访问权限,就好像它实际包含在页面中一样。