我正在編寫一個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端執行所有請求(不太可能! - 但可能)。