在 Chrome 中调试自定义用户脚本(又名 Greasemonkey)的最佳方法是什么?有没有办法在开发者工具中启用用户脚本跟踪?
问问题
9989 次
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 回答