【问题标题】:User Script Debugging in Google Chrome谷歌浏览器中的用户脚本调试
【发布时间】:2010-12-08 03:50:37
【问题描述】:

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

【问题讨论】:

    标签: google-chrome greasemonkey userscripts


    【解决方案1】:

    你想要什么样的调试?就像 Alex 所说的,用户脚本将在与调试页面本身相同的上下文中列出。如果您转到开发人员工具中的“脚本”选项卡,您会看到一个带有下拉菜单的栏,您可以在其中选择要调试的适当 javascript 文件。此类脚本的 URL 应类似于 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>
    

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

    【讨论】:

      【解决方案2】:

      我在我的脚本中使用以下函数来实现跨浏览器 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,因此该函数中只有这些树。
      您也可以查看他的guide
      或者你也可以结帐GIJoe'scross-browser GM Api

      【讨论】:

      • 这可能已经过时了。 typeof GM_getValue('a', 'b') != 'undefined' 在我的 chrome 用户脚本中评估为 false
      【解决方案3】:

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

      【讨论】:

      • 大声笑...这基本上就是我正在使用我的用户脚本做的事情,但它不起作用:)
      猜你喜欢
      • 1970-01-01
      • 2012-04-22
      • 2018-10-16
      • 2017-03-29
      • 2017-05-09
      • 2012-10-19
      • 1970-01-01
      相关资源
      最近更新 更多