逐步完成一个greasemonkey脚本

qwe*_*ymk 5 javascript debugging greasemonkey

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

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

Bro*_*ams 4

先简单的部分:

\n\n
\n

“同样的道理:有没有办法测试脚本而不必每次都等待 4 秒才能安装它?”

\n
\n\n

是的!

\n\n
    \n
  1. 确保您安装了 Greasemonkey 9.0 或更高版本。

  2. \n
  3. 确保您有一个配置了 GM 的编辑器。例如,您可以在 GM 选项中进行设置,或者打开about:config并设置,但任何像样的编程编辑器都应该这样做。greasemonkey.editorD:\\Program Files\\TextPad\\TextPad.exe

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

  6. \n
  7. 请注意,以这种方式对@require指令所做的更改仍然不会生效。也就是说,新文件将不会被复制也不会被使用。您仍然必须卸载/重新安装才能使@require更改生效。

  8. \n
\n\n
\n\n
\n

“我想知道是否有办法将脚本暴露给 firebug 并让它设置断点。我希望能够最终单步执行我正在处理的脚本。”

\n
\n\n

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

\n\n

关于让 Firebug 在 GM 脚本上良好运行的讨论已经持续了 4 年多。\xc2\xa0 这是Greasemonkey-Dev Group上最新/相关的帖子。

\n\n

在不久的将来,将无法单步执行使用GM_函数的 GM 脚本。

\n\n

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

\n\n

例如,像这样构造您的代码:

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


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

\n\n

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

\n\n

请注意,此方法确实会暴露恶意 JavaScript(从目标页面)获取提升权限并可能入侵您的系统的路径(这也是 GM 最初被移至沙箱的原因之一)。但是,当定位受信任页面时,它既快速又简单。

\n\n

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

\n\n
var scriptNode          = document.createElement ("script");\nscriptNode.textContent  = localMain.toString() + "\\n localMain ();";\ndocument.body.appendChild (scriptNode);\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n