Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Greasemonkey或userscript将远程JavaScript文件替换为本地调试副本_Javascript_Google Chrome_Firebug_Greasemonkey - Fatal编程技术网

使用Greasemonkey或userscript将远程JavaScript文件替换为本地调试副本

使用Greasemonkey或userscript将远程JavaScript文件替换为本地调试副本,javascript,google-chrome,firebug,greasemonkey,Javascript,Google Chrome,Firebug,Greasemonkey,在调试使用Google后端的客户端应用程序时,我添加了一些调试版本的函数,并使用Chrome开发者工具脚本编辑器插入它们 然而,这种方法有很多限制,首先是编辑器似乎并不总是处理缩小的文件,当JS文件有35K行长时,这是一个问题 另一个问题是,在加载期间完成的所有初始化都使用原始的“unpatched”函数,因此这并不理想 我想用我自己的本地副本替换远程javascript.js文件,可能在文件名上使用一些正则表达式,或者任何合适的策略,如果一个比另一个简单,我很乐意使用Firefox或Chrom

在调试使用Google后端的客户端应用程序时,我添加了一些调试版本的函数,并使用Chrome开发者工具脚本编辑器插入它们

然而,这种方法有很多限制,首先是编辑器似乎并不总是处理缩小的文件,当JS文件有35K行长时,这是一个问题

另一个问题是,在加载期间完成的所有初始化都使用原始的“unpatched”函数,因此这并不理想


我想用我自己的本地副本替换远程
javascript.js
文件,可能在文件名上使用一些正则表达式,或者任何合适的策略,如果一个比另一个简单,我很乐意使用Firefox或Chrome,根据需求的不同,这些类型的问题有两种解决方案,它们遵循两种方法中的任何一种

  • 浏览器API switcharoo
  • 基于代理的拦截将被拒绝
  • 浏览器API开关。 firefox和chrome都支持浏览器扩展,它们可以利用特定于平台的API分别为firefox和chrome注册“onbeforeload”或“onBeforeRequest”事件处理程序。ChromeAPI目前处于实验阶段,因此这些工具在firefox下可能会得到更好的开发。 这两个工具都有可用的源代码

    这两款firefox应用程序的关键点在于,它们在浏览器获得web请求之前拦截该请求,并在http/https加密阶段的另一端进行操作,因此可以看到解密的响应,但正如所确定的那样,它们并不能完成整件事,尽管JSDENIFIER非常有用,我没有找到一个firefox插件来实现我想要的功能,但我可以从之前的插件中看出,firefox和chrome都可以实现。尽管他们实际上并没有按要求完成任务

    基于代理的拦截befiddle在普通HTTP环境中,这绝对是更好的选择,有很多代理,如pivoxy、Charles Web HTTP代理,可能还有一些我没有特别关注的代理,如snort,它们支持某种过滤

    对我来说,最简单的解决方案是firefox上的foxyproxy和privoxy,并配置user.action和user.filter来检测页面的url,然后应用一个过滤器,将原来的src标记替换为我自己的标记

    https案例。代理与插件 当请求是https时,代理无法看到请求url或响应主体,因此无法进行很酷的交换。然而,对于那些喜欢摆弄浏览器的人来说,有一个选择。这就是中间的人SSL代理。这似乎是解决这个问题的主要办法。基本上,它的工作方式是,当浏览器向远程HTTPS服务器发出请求时,ssl代理会截获该请求,并从服务器的ip地址动态生成一个服务器证书,该证书由它自己的根CA签名,然后发送回浏览器。浏览器明显地抱怨自签名证书,但是在这里您可以选择将SSL代理根CA证书安装到浏览器中,使浏览器处于混乱状态,并允许SSL代理在中间进行修改,并在原始响应体上进行替换和过滤。 选择您自己的chrome扩展版 我决定推出我自己的chrome扩展,我计划让它可用。目前它处于一个非常硬编码的状态,符合我自己的需求,但它工作得相当好,即使对于https请求,另一个好处是浏览器插件解决方案可以与浏览器开发人员工具更紧密地集成。

    还有一个工具-Chrome扩展,可用于重写URL,并用本地托管库替换生产库,设置非常简单,界面非常友好

    看看这个:


    PS:我知道有人回答了这个问题,但我仍然回答了这个问题,因为这对未来的读者非常有益。

    复制的-,它显示了如何用本地版本替换远程JS。@Brock Adams该解决方案是windows特定的,在unix-y操作系统上不起作用。我不知道这对OP是否重要,但如果有人有一个通用的解决方案就好了。@Daniel Mendel,这里有两个解决方案。一个可能会为OP工作,因为他很可能在windows上。另一种解决方案不仅限于Windows,而且还解释了尝试使用用户脚本或Greasemonkey face来实现这一点的局限性(尽管当移植到Chrome时,答案可能会更好——这是我没有测试过的,因为我只少量使用Chrome)。@BrockAdams,我想事实是,实现这一点的唯一无缝方法是进入浏览器和网络之间,在那里你可以欺骗请求,这样的解决方案最终将是特定于操作系统的,因为它基本上是一种自作自受的中间人攻击。任何通用的解决方案都会在请求周期结束后进行,因此会带来麻烦。如果这没有得到令人满意的跨操作系统的答案,我会提供一次赏金,让我来。我也非常有兴趣开发这样的解决方案(FF或Chrome扩展)。你认为有可能看到你的插件或理解方法吗?FF扩展可以在Charles下载页面的底部找到。谢谢Requestly也可用于Firefox。从这里下载:我不推荐。有一个内置的聊天室,谁知道他们从你那里获取了什么数据而不提及呢。或者不提它,这样你就可以通过忽略描述而知道。