2010-03-16 165 views
1

感謝大家提前 -如何阻止Firefox通過Firefox擴展下載和應用CSS?

所以我一直在這個問題上撞了很長一段時間,並燒燬了我的所有選項。我目前取消css請求的方法是在nsIWebProgressListener.onStateChange中使用nsIRequest.cancel。這在大多數情況下都是有效的,除非事情有點遲緩,少數人會在我能找到他們之前溜走並跳出負載組。這顯然是一個骯髒的解決方案

我已閱讀以下鏈接,嘗試瞭解如何在創建nsIRequest之前禁用css ...沒有骰子。

https://developer.mozilla.org/en/Document_Loading_-_From_Load_Start_to_Finding_a_Handler https://developer.mozilla.org/en/The_life_of_an_HTML_HTTP_request https://developer.mozilla.org/en/Bird「通過介紹對象/接口s_Eye_View_of_the_Mozilla_Framework

如何禁用的CSS?這可能嗎?在nsIDocShell內部,有幾種屬性暗示可以通過瀏覽器docshell禁用css - allowPlugins,allowJavascript,allowMetaRedirects,allowSubframes,allowImages。

有什麼建議嗎?

感謝,

山姆

回答

2

禁用樣式表菜單選項使用功能

setStyleDisabled(true) 

所以你可能只需調用這個函數每當創建新的瀏覽器選項卡。樣式表仍然從服務器請求,但未應用。這個功能是不是很複雜,不惹nsIRequest,來源:

function setStyleDisabled(disabled) { 
    getMarkupDocumentViewer().authorStyleDisabled = disabled; 
} 

在網頁開發工具的源代碼挖我注意到,他們的「禁用樣式」功能循環槽全部document.styleSheets並設置disabled屬性true,如:

/* if DOM content is loaded */ 
var sheets = document.styleSheets; 
for(var i in sheets){ sheets[i].disabled = true; } 

所以,如果關鍵是不適用的CSS的網頁,上面的解決方案之一應該工作。但如果你真的需要停止從服務器下載樣式表,我很擔心nsIRequest攔截是你唯一的選擇。

1

將permissions.default.stylesheet設置爲2並且瞧!

實際上,您可以使用權限管理器在逐個主機的基礎上阻止或允許樣式表。

0

不幸的是,似乎並沒有像allowImages這樣的簡單標誌。 bugzilla爲此添加了https://bugzilla.mozilla.org/show_bug.cgi?id=340746。您現在可以使用新的bugzilla投票功能爲其投票。您也可以將自己添加到CC列表,以便任何人有任何工作時通知他們。

一個相關的請求是給我們提供基本的HTML解析支持,這可能是你正在嘗試做的。不幸的是,這也不被支持,但你可以在https://bugzilla.mozilla.org/show_bug.cgi?id=102699投票/追蹤bugzilla。

因此,唯一可行的解​​決方案似乎是@pawal所暗示的某種攔截。這裏是一個鏈接,談論攔截的基礎知識,至少讓你/我們開始https://developer.mozilla.org/en/XUL_School/Intercepting_Page_Loads。它列出了我在下面列出的幾個選項。

這些最初的幾個似乎只是在網頁/文件級別,所以我不認爲他們有幫助:

  • 加載事件(的addEventListener負載)
  • 網絡進度偵聽器(nsIWebProgressListener) - 我試着這種方法,它似乎只是要求頁面本身,而不是頁面內的內容。
  • 文檔裝載機服務 - nsIWebProgressListener的全球版本,所以我認爲它有同樣的問題(網頁級別只)

這使得兩個人我還沒試過。他們在全球範圍內工作,因此您需要將它們過濾到您關心的瀏覽器/頁面。

  • HTTP觀察員 - 好像它可能工作,需要驗證它調用回CSS
  • 內容策略 - 好像對我最好的選擇,因爲它明確地被調用CSS,有一天我希望去嘗試:)