2013-09-26 75 views
1

我正在编写一个XUL应用程序,它记录使用<browser>标记创建的浏览器实例内发生的所有网络通信。区分插件HTTP请求和JavaScript HTTP请求

我可以使用http-on-modify-request来跟踪所有正在进行的请求并相应地修改标头,但是我无法区分哪个请求是由Flash之类的插件制作的,或者是由JavaScript制作的。

有没有一种方法可以区分这些请求?

回答

1

警报,讨厌的黑客传入!

你绝对不能区分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更改)。您可以使用NSIObserverNSIProgressListener来监视URL更改/重新加载。

编辑:所有这些都假设Flash内容未使用闪存<→JavaScript桥接并在JavaScript端执行所有请求(不太可能! - 但可能)。