我正在编写一个XUL应用程序,它记录使用<browser>
标记创建的浏览器实例内发生的所有网络通信。区分插件HTTP请求和JavaScript HTTP请求
我可以使用http-on-modify-request来跟踪所有正在进行的请求并相应地修改标头,但是我无法区分哪个请求是由Flash之类的插件制作的,或者是由JavaScript制作的。
有没有一种方法可以区分这些请求?
我正在编写一个XUL应用程序,它记录使用<browser>
标记创建的浏览器实例内发生的所有网络通信。区分插件HTTP请求和JavaScript HTTP请求
我可以使用http-on-modify-request来跟踪所有正在进行的请求并相应地修改标头,但是我无法区分哪个请求是由Flash之类的插件制作的,或者是由JavaScript制作的。
有没有一种方法可以区分这些请求?
警报,讨厌的黑客传入!
你绝对不能区分Flash和Javascript的请求,因为它们实际上使用相同的Mozilla平台API。你需要做的事,使那些非Flash requets看起来不同 - 在http-on-modify-request
实施检查时
然而,没有什么能阻止你使非Flash请求时看起来不同。
我能想到的最简单的方法是在你的http-on-modify-request
处理程序中添加一个QueryString参数。
因此,基本上,只需在每个请求URI中添加诸如?___NONFLASH__=897123487
或&___NONFLASH__=897123487
之类的内容即可。 (在初始化过程中你随机生成令牌897123487
,这样它就不会被JavaScript/Flash试图从这个“沙箱”中'逃脱')猜出。
你需要影响浏览器的content.contentDocument
如下:
href
属性action
属性window.XMLHttpRequest
- 一个版本的自己制造的替换此(使确保所有客户端脚本运行之前更换!)这只是离开客户端脚本启动window
-Level呐(例如:window.location.href
更改)。您可以使用NSIObserver
或NSIProgressListener
来监视URL更改/重新加载。
编辑:所有这些都假设Flash内容未使用闪存<→JavaScript桥接并在JavaScript端执行所有请求(不太可能! - 但可能)。