1

提前感谢大家-

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

有什么建议么?

谢谢,

山姆

4

3 回答 3

2

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

setStyleDisabled(true)

因此,每当创建新的浏览器选项卡时,您可能只需调用此函数。仍然从服务器请求样式表,但未应用。这个函数不是很复杂,也不会与 nsIRequest 混淆,来源:

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拦截是您唯一的选择。

于 2010-03-26T12:23:16.487 回答
1

将 permissions.default.stylesheet 设置为 2,瞧!

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

于 2010-04-13T21:33:16.620 回答
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 加载)
  • Web Progress Listeners (nsIWebProgressListener) - 我尝试了这种方法,它似乎只为页面本身调用,而不是为页面内的内容调用。
  • Document Loader Service - nsIWebProgressListener 的全球版本,所以我认为它有同样的问题(仅限页面级别)

剩下两个我还没有尝试过。它们在全球范围内工作,因此您需要将它们过滤到您关心的浏览器/页面。

  • HTTP Observers - 似乎它可能工作,需要验证它回调 CSS
  • 内容政策 - 对我来说似乎是最好的选择,因为它明确要求 CSS,有一天我希望尝试一下 :)
于 2011-05-04T16:39:53.093 回答