我没有找到使用Firebug扩展程序调试Greasemonkey脚本的方法。
有谁知道怎么做?
感谢。
答案 0 :(得分:24)
更新: Mene + Shuman修复现在被Firefox 30和Firebug 2破坏。火狐31 可能提供解决方法(将调查)。在此期间,请使用下面列出的“常规解决方法策略”。
更新:此答案现已过时。
如果您打开about:config
和
将extensions.firebug.filterSystemURLs
设为false
然后你可以使用Firebug来调试Greasemonkey脚本,就像任何其他脚本一样。
无论@grant
模式如何,这都有效。
请参阅Mene's answer -- with an assist from Shuman。
旧回答:
因为Greasemonkey在沙箱中运行,所以Firebug无法看到它。没有简单的方法。
一般解决方案策略:
首先在Firebug的JavaScript控制台中测试不使用GM_
函数的GM脚本的所有部分。最大限度地减少GM_
功能的使用,根本不使用GM_log()
。
所有Firebug's console
functions在GM脚本中运作良好。
答案 1 :(得分:8)
var e = document.createElement("script");
e.src = 'http://www.xxxxxxxx.com/yyyyyyyy.js';
e.type="text/javascript";
document.getElementsByTagName("head")[0].appendChild(e);
您可以将其添加到xxx.user.js,并将其安装在greasemonkey中。
然后,您可以根据需要调试您的js。
答案 2 :(得分:8)
目前的Firefox和Firebug现在可以调试当前的Greasemonkey脚本,就像其他任何javascript一样。只需在下拉菜单中找到您的*.user.js
脚本即可。控制台也可以工作。
这至少适用于Firefox 28.0和Firebug 1.12.7;我没有尝试过早期的版本。
注意:为了使其正常工作,您可能必须将extensions.firebug.filterSystemURLs
设置为false。请参阅"Profiling Greasemonkey scripts" in the Firebug, bug tracker.(感谢Shuman)
答案 3 :(得分:4)
这里没有其他解决方案适用于我,但是Jan Odvarko answer关于如何调试Firefox扩展也适用于GreaseMonkey脚本:
在Firefox 19或更高版本中,可以使用内置的JS调试器 在浏览器本身。转到about:config并设置以下两个 首选项:
devtools.chrome.enabled: true devtools.debugger.remote-enabled: true
重新启动浏览器后,您可以访问浏览器调试器 通过工具> Web开发人员>浏览器调试器。
(请注意,您必须接受传入连接)
详情请见: https://developer.mozilla.org/en/docs/Debugging_JavaScript
然后只需搜索用户名称并开始调试。
答案 4 :(得分:4)
可以使用之前提到的原生Firefox调试器来完成。以下是现代版Firefox的说明。
在about:config
中设置以下首选项:
devtools.chrome.enabled: true
devtools.debugger.remote-enabled: true
devtools.debugger.prompt-connection: false
打开全局脚本调试器窗口:
Open Menu
- > Developer
- > Browser Toolbox
- > Debugger
(或 Ctrl + Shift + Alt + I )。
搜索您的用户名称并启动debugging。
答案 5 :(得分:3)
Chromebug可以看到沙盒脚本http://getfirebug.com/wiki/index.php/Chromebug_User_Guide,但我没有在Greasemonkey上试过它。
答案 6 :(得分:2)
- 这个答案已经过时,请使用上面的@Brock Adams解决方案 -
从外部加载主脚本,而不是通过GM运行它。所以你只是使用GM注入脚本。
这是@bigml和@Yuval的解决方案之间的混合体,它使用了jquery。它也适用于框架。
// ==UserScript==
// @name My GM script
// @include The website I want this to run on
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// ==/UserScript==
$(document).ready(function() {
// fetch jquery dependent scripts using $.getScript()
});
答案 7 :(得分:1)
我已经尝试过ChromeBug,它似乎无法正常工作。
使用FireBug我通过在GM代码中添加“调试器”来获得成功的起点。这会导致断点,我可以检查堆栈上的变量,但是没有显示正确的文件,所以我不能步骤或任何东西。
我使用FirebugMonkey获得了最大的成功(https:// addons.mozilla.org/en-US/firefox/addon/13623/),我刚刚做了基本工作 调试GreaseMonkey脚本得益于一些解释 f0rsvinn最近对扩展页面的评论。以下是我刚刚在http://groups.google.com/group/greasemonkey-users/browse_thread/thread/994cfa58c79d222发布的说明:
我从未想过它的工作方式是创造自己的方式 脚本周围的沙箱,而不是使用Greasemonkey,你 实际上必须关闭GM。有一些转基因方面的事情 虽然因为脚本真的不在GreaseMonkey中,所以不会起作用。 例如,GM_getValue返回undefined。
尽管如此,它仍适用于基本调试 - 并且总比没有好。
使用步骤如下:
您在ScriptManager中添加的脚本应该在 FireBug脚本列表。
答案 8 :(得分:1)
与@ bigml的建议类似,如果您设置本地网络服务器(apache)来提供用户脚本文件,则可以将其运行为非特权,然后在您的用户脚本中添加一些内容:
if (typeof GM_addStyle == "undefined") {
loadScript("http://localhost/path/to/script.user.js");
}
else {
runScript();
}
function loadScript(url) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
document.getElementsByTagName('head')[0].appendChild(res);
}
function runScript() {
// ... whatever your userscript does ...
}
当然,您不会在特权环境中运行。但是这样你可以像任何其他脚本一样轻松地连续调试脚本。
答案 9 :(得分:0)
正如其他人所说的那样,您可以设置一个简单的HTTP服务器并使用Greasemonkey将其提供给您的页面,如下所示:
function loadScript(url) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
document.getElementsByTagName('head')[0].appendChild(script);
}
WEBrick和Python -m SimpleHTTPServer对此有好处。我们还可以通过向GreaseMonkey中的文档添加自定义事件处理程序,将GM _...函数公开给脚本:
function gMHandler(e){
GM_log(e.detail.message);
e.detail.response = "Hi!"
}
document.addEventListener("gM", gMHandler, false);
然后在服务脚本中,在任意DOM元素上引发此事件将运行处理程序并修改元素的响应参数:
$(document).ready(function() {
var event = new CustomEvent(
"gM",
{
detail: { message: "Hello World!" }
bubbles: true,
cancelable: true,
}
);
document.getElementById("AnyElement").dispatchEvent(event);
alert("Response was: " + event.detail.response);
});