2017-08-13 104 views
1

我正在寫一個隱私瀏覽器擴展。我需要做的一件事就是欺騙window.navigator對象,它是我成功爲主窗口對象成功完成的屬性。我還需要欺騙頁面上每個iframe.contentWindow的window.navigator對象。我想我可以使用self.frames,然後通過欺騙每個循環,但是我的代碼運行後創建但在我的代碼運行時不存在的框架的情況如何。 var myFrame = document.createElement(「iframe」); ???欺騙導航器裏面<iframe>

我希望所有導航器對象實例都是主窗口中的實例,以及每個iframe中創建的實例都要被僞造。爲了讓您知道我正在嘗試做什麼,這無法欺騙每個iframe中的導航器。

Object.defineProperty(HTMLIFrameElement.prototype.contentWindow, "navigator", { 
    configurable: true, 
    enumerable: true, 
    value: "some fake navigator object" 
}); 

也許是因爲它實際上window.HTMLIFrameElement.prototype和那我要去哪裏錯了?

任何想法? 如果你不明白的問題,請詢問更多的細節。

回答

2

iframe中的全局對象(window)不是從HTMLIFrameElement的原型派生的。該原型的contentWindow屬性僅僅是一個訪問器,它爲您提供了一個跨域的代理服務器給其他全局服務器。

要替換實際的navigator屬性,您需要在每個iframe中使用{all_frames: true, run_at: document-start}運行腳本。

+0

謝謝你對所有的框架。即使我已經多次使用manifest.json文檔,我完全忘了這個關鍵。我現在還使用match_about_blank:true來將內容腳本注入about:空白頁面。我留下的一個問題是,文檔指出注入到about:空白頁面的腳本不會在document_start注入,即使您指定了文檔啓動。 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/content_scripts#match_about_blank。這對我來說是一個問題,因爲時間安排很重要。任何想法? – Snapper26