2013-12-17 48 views
0

我正在創建一個簡單的插件來捕獲http請求並將其保存到文件中。保存模塊也可以工作並捕獲模塊。屬於每個窗口的所有http請求都保存爲單獨的文件。例如,所有來自窗口1的任何選項卡的http請求保存到文件1.txt,從窗口2保存到文件2.txt等。 但現在我有問題,因爲來自窗口2,3的請求,...保存也到以前的文件。我的意思是:觀察並保存firefox擴展中的http請求

  1. 從窗口1所有HTTP請求保存到1.txt的(這是確定)
  2. 從窗口2保存到1.txt的所有HTTP請求和2.txt
  3. 從窗口全部的http請求3保存爲1.txt,2.txt和3.txt

我使用觀察者,但爲了測試我使用eventListener進行點擊,任何工作都很完美。從窗口點擊x僅保存文件x。任何想法,有什麼可能是錯的?

回答

1

觀察員是全球性的,而不是每個窗口。當你從覆蓋腳本註冊它們時,每個窗口都會有一個觀察者,並且每個觀察者都會得到關於所有 http連接的通知,無論請求來自哪個窗口(記住:觀察者都是全局的)。哦,並且每個觀察者也會在沒有任何關聯窗口的每個請求(例如,安全瀏覽請求刷新,其他組件,其他組件以及從它們的代碼模塊執行請求的其他附件)上得到每個通知。

你應該做到以下幾點:

  • 重寫代碼只能註冊爲整個應用程序只有一個觀察者。最簡單的方法是在a code module中實現它。
  • 讓觀察者找出DOM窗口,如果有的話,頂層窗口(如果有的話),並將其映射到特定文件。我已經給了一些代碼in another answer將請求映射到http觀察者中的DOMWindow和頂級窗口。
  • 如何將請求映射到窗口和文件最終取決於您。您可以用您的代碼模塊註冊每個頂級窗口,然後您的代碼模塊會爲每個窗口生成一個ID /文件名,然後在observe中使用該信息將請求窗口映射到ID和文件,...
+0

好吧它有道理。我會明天嘗試這個解決方案,但順便說一句,如何實現與jsm觀察員?我無法在您的MDN鏈接中找到它 –

+1

與在疊加層中實現觀察者一樣 – nmaier