qwe*_*ymk 5 javascript debugging greasemonkey
我知道firebug 无法访问greasemonkey 脚本,但我想知道是否有办法将脚本暴露给firebug 并设置断点。我希望能够最终逐步完成我正在处理的脚本。
类似的说明:有没有什么方法可以测试脚本而不必每次都等待 4 秒才能安装它?
先简单的部分:
\n\n\n\n\n“同样的道理:有没有办法测试脚本而不必每次都等待 4 秒才能安装它?”
\n
是的!
\n\n确保您安装了 Greasemonkey 9.0 或更高版本。
确保您有一个配置了 GM 的编辑器。例如,您可以在 GM 选项中进行设置,或者打开about:config并设置,但任何像样的编程编辑器都应该这样做。greasemonkey.editorD:\\Program Files\\TextPad\\TextPad.exe
现在,通过打开 GM 的脚本管理器并按相应的编辑按钮来编辑脚本。\n您的编辑器应该打开并加载正确的文件,并且您所做的任何更改将在每次保存文件时立即生效。
请注意,以这种方式对@require指令所做的更改仍然不会生效。也就是说,新文件将不会被复制也不会被使用。您仍然必须卸载/重新安装才能使@require更改生效。
\n\n\n“我想知道是否有办法将脚本暴露给 firebug 并让它设置断点。我希望能够最终单步执行我正在处理的脚本。”
\n
有一个新的附加组件FireBugMonkey可能会有所帮助(我还不需要尝试它)。
\n\n关于让 Firebug 在 GM 脚本上良好运行的讨论已经持续了 4 年多。\xc2\xa0 这是Greasemonkey-Dev Group上最新/相关的帖子。
\n\n在不久的将来,将无法单步执行使用GM_函数的 GM 脚本。
对于不使用此类函数的部分代码,您可以通过将该代码注入到目标页面(Firebug 可以在其中看到它)来解决此问题。
\n\n例如,像这样构造您的代码:
\n\nfunction 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}\nRun Code Online (Sandbox Code Playgroud)\n\n
\n然后在 Firefox 上,您可以使用unsafeWindow.localMain = localMain;注入代码,Firebug 会看到它。
unsafeWindow.localMain();从 GM 运行代码,localMain();从 Firebug 控制台运行它。
请注意,此方法确实会暴露恶意 JavaScript(从目标页面)获取提升权限并可能入侵您的系统的路径(这也是 GM 最初被移至沙箱的原因之一)。但是,当定位受信任页面时,它既快速又简单。
\n\n~~~
\n或者,您可以像这样注入脚本:
var scriptNode = document.createElement ("script");\nscriptNode.textContent = localMain.toString() + "\\n localMain ();";\ndocument.body.appendChild (scriptNode);\nRun Code Online (Sandbox Code Playgroud)\n\n此方法适用于所有相关浏览器。
\n\n~~~
\n像 jQuery 这样的库可以以类似的方式复制或注入。