2010-03-16 82 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,有一天我希望去尝试:)