如何阻止firefox通过firefox扩展下载和应用CSS?

时间:2010-03-16 03:46:37

标签: xul firefox-addon xpcom

提前感谢所有人 -

所以我一直在讨论这个问题已经有一段时间了,并且已经烧掉了我所有的选择。我目前取消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。

有什么建议吗?

谢谢,

萨姆

3 个答案:

答案 0 :(得分:2)

禁用样式表的菜单选项使用函数

setStyleDisabled(true)

因此,只要创建新的浏览器选项卡,您就可以调用此函数。仍然从服务器请求样式表,但不应用。这个函数不是很复杂,并且不会破坏nsIRequest,source:

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

挖掘Web Developer Toolbar源代码我注意到他们的“禁用样式表”功能循环通过所有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 :(得分:1)

将permissions.default.stylesheet设置为2并vo!

您实际上可以使用权限管理器逐个主机地阻止或允许样式表。

答案 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 load)
  • Web Progress Listeners(nsIWebProgressListener) - 我尝试过这种方法,似乎只是为页面本身调用,而不是页面内容。
  • 文档加载器服务 - nsIWebProgressListener的全局版本,所以我认为它有同样的问题(仅限页面级别)

留下了另外两个我尚未尝试的人。它们全局工作,因此您需要将它们过滤到您关心的浏览器/页面。

  • HTTP Observers - 看起来它可能有用,需要验证它回调CSS
  • 内容政策 - 对我来说似乎是最好的选择,因为它明确地被称为CSS,有一天我希望尝试它:)