单步执行greasemonkey脚本

时间:2011-03-07 23:57:19

标签: javascript debugging greasemonkey

我知道firebug无法访问greasemonkey脚本,但我想知道是否有办法将脚本暴露给firebug并设置断点。我希望能够最终逐步完成我正在处理的脚本。

类似的说明:有没有办法测试脚本而不必每次等待4秒才能安装它?

3 个答案:

答案 0 :(得分:4)

简单的第一部分:

  

“在类似的说明中:有没有办法测试脚本而不必每次等待4秒才能安装它?”

是!

  1. 确保已安装Greasemonkey 9.0或更高版本。

  2. 确保您有使用GM配置的编辑器。您可以在GM选项中设置此选项,或打开 about:config 并设置greasemonkey.editor,例如D:\Program Files\TextPad\TextPad.exe,但任何体面的编程编辑器都应该做。

  3. 现在通过打开GM的脚本管理器并按相应的 编辑 按钮来编辑脚本。 您的编辑器应该打开并加载正确的文件,并且每次保存文件时,您所做的任何更改都会立即生效。

  4. 请注意以@require指令进行的更改仍然不会生效。也就是说,新文件不会被复制也不会被使用。您仍必须卸载/重新安装才能更改@require更改。


  5.   

    “我想知道是否有办法将脚本公开给firebug并设置断点。我希望能够最终逐步完成我正在处理的脚本。”

    有一个新的附加组件FireBugMonkey可能会有所帮助(我还需要尝试一下)。

    关于让Firebug在GM脚本上运行良好的讨论已经持续了4年多。以下是the Greasemonkey-Dev Group上最新/相关的主题。

    在不久的将来,无法逐步使用GM_ functions的GM脚本。

    您可以通过将代码注入目标页面来解决不使用此类函数的部分代码,然后Firebug可以在其中看到它。

    例如,像这样构建代码:

    function localMain ()
    {
        /*--- Put EVERYTHING inside this wrapper, functions and variables.
            Call or use nothing else that's defined in the GM script here.
            You can use objects in the source page's scope, though.
        */
        console.log ("Hiya!");
    }
    


    然后在Firefox上,你可以使用unsafeWindow.localMain = localMain;来注入代码,Firebug会看到它。

    unsafeWindow.localMain();运行来自GM的代码,localMain();从Firebug控制台运行它。

    请注意,此方法确实暴露了恶意JavaScript(来自目标页面)的路由,以获取提升的权限并可能使您的系统失效(这是GM首先被移动到沙箱的原因之一)。但是,在定位可信页面时,它会快速而简单。

    ~~~
    或者,您可以像这样注入脚本:

    var scriptNode          = document.createElement ("script");
    scriptNode.textContent  = localMain.toString() + "\n localMain ();";
    document.body.appendChild (scriptNode);
    

    此方法适用于所有相关浏览器。

    ~~~
    像jQuery这样的库可以以类似的方式复制或注入。

答案 1 :(得分:1)

  

我知道firebug无法访问greasemonkey脚本,但我想知道是否有办法将脚本暴露给firebug并设置断点。我希望能够最终逐步完成我正在处理的脚本。

没有办法在用户脚本atm上设置Firebug断点,但是John Barton(Firebug)和其他人正在计划一种方法来实现这一点,所以在将来要注意它!

  

类似的说明:有没有办法测试脚本而不必每次等待4秒才能安装它?

如果您使用Scriptish,则安装时没有延迟。

答案 2 :(得分:0)

试试Venkman JS调试器。我不确定它是否可以访问脚本,但值得一试。要测试的另一件事是让Firebug打开/启用并粘贴一些“调试器”;陈述,看它是否捡起来。这些是一些想法,我还没有测试过它们。