15

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

4

3 回答 3

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>

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

于 2010-03-10T17:28:30.203 回答
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 和 setValue,因此该函数中只有这些树。
您也可以查看他的指南
或者您也可以查看GIJoe 的 跨浏览器 GM Api

于 2010-05-08T08:55:40.853 回答
0

您可以使用较小的脚本将自定义调试脚本实际注入页面。那时,您将在开发人员工具中拥有与实际包含在页面中一样的访问权限。

于 2009-10-19T21:59:16.403 回答