在Chrome中调试自定义用户脚本(aka Greasemonkey)的最佳方法是什么?有没有办法在开发人员工具中启用用户脚本跟踪?
答案 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)
您可以使用较小的脚本将自定义调试脚本实际注入页面。此时,您将在开发人员工具中获得相同的访问权限,就好像它实际包含在页面中一样。