我正在编写一个XUL应用程序,它记录使用<browser>
标记创建的浏览器实例中发生的所有网络通信。
我可以使用http-on-modify-request来跟踪所有正在发出的请求并相应地修改标题,但是我无法区分Flash之类的插件或者是由JavaScript制作的请求。
有没有办法区分这些请求?
答案 0 :(得分:1)
警报,讨厌的黑客传入!
您绝对无法区分Flash与Javascript的请求,因为它们实际上使用相同的Mozilla平台API。
然而,在http-on-modify-request
实现中检查时,没有什么能阻止使非Flash请求看起来不同 - 您需要做一些事情来使所有非Flash请求看起来不同。
我能想到的最简单的方法是添加(然后在http-on-modify-request
处理程序中删除)QueryString参数。
基本上,只需在每个请求URI中添加?___NONFLASH__=897123487
或&___NONFLASH__=897123487
之类的内容即可。 (在初始化时随机生成令牌897123487
,以便JavaScript / Flash试图“逃离”此“沙箱”时无法猜到它。
您需要在浏览器content.contentDocument
中影响以下内容:
href
属性action
属性window.XMLHttpRequest
- 将此替换为您自己制作的版本(确保在任何客户端脚本运行之前替换它!)
这只是留下客户端脚本启动的window
级导航(例如:window.location.href
更改)。您可以使用NSIObserver
或NSIProgressListener
来监控网址更改/重新加载。
编辑:所有这些都假设Flash内容没有使用Flash&lt; - &gt; JavaScript桥接器并在JavaScript端执行所有请求(不太可能! - 但可能)