Как запретить Firefox загружать и применять CSS через расширение Firefox?

Всем заранее спасибо -

Итак, я уже довольно давно занимаюсь этим вопросом и перебрал все свои варианты. Мой текущий подход к отмене запросов css заключается в использовании nsIRequest.cancel внутри nsIWebProgressListener.onStateChange. Это работает большую часть времени, за исключением случаев, когда что-то немного тормозит, некоторые из них проскальзывают и выпрыгивают из группы загрузки, прежде чем я смогу добраться до них. Это явно грязное решение.

Я прочитал следующие ссылки, чтобы попытаться лучше понять, как отключить css до создания nsIRequest... без кубиков.

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 есть несколько атрибутов, которые подразумевают, что вы можете отключить css через docshell браузера — allowPlugins, allowJavascript, allowMetaRedirects, allowSubframes, allowImages.

Какие-либо предложения?

Спасибо,

Сэм


person Sam Ingrassia    schedule 16.03.2010    source источник


Ответы (3)


Параметр меню, который отключает таблицы стилей, использует функцию

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 перехват - ваш единственный вариант.

person pawel    schedule 26.03.2010

Установите для разрешения.default.stylesheet значение 2 и вуаля!

На самом деле вы можете использовать менеджер разрешений, чтобы блокировать или разрешать таблицы стилей для каждого хоста.

person Neil    schedule 13.04.2010

К сожалению, похоже, что нет простого флага, такого как allowImages. Добавление ошибки для этого: https://bugzilla.mozilla.org/show_bug.cgi?id=340746. Теперь вы можете проголосовать за него, используя новую функцию голосования bugzilla. Вы также можете добавить себя в список CC, чтобы получать уведомления, если кто-то когда-либо будет над ним работать.

Связанный запрос состоит в том, чтобы просто предоставить нам базовую поддержку синтаксического анализа HTML, что может быть тем, что вы пытаетесь сделать. К сожалению, это тоже пока не поддерживается, но вы можете проголосовать/отследить багзиллу по адресу https://bugzilla.mozilla.org/show_bug.cgi?id=102699.

Таким образом, единственным рабочим решением, по-видимому, является какой-то перехват, как предлагает @pawal. Вот ссылка, в которой рассказывается об основах перехвата, чтобы хотя бы помочь вам/нам начать https://developer.mozilla.org/en/XUL_School/Intercepting_Page_Loads. В нем перечислены несколько вариантов, которые я перечисляю ниже.

Эти первые несколько, похоже, находятся на уровне страницы/документа, поэтому я не думаю, что они помогают:

  • Загрузить события (загрузка addEventListener)
  • Слушатели веб-прогресса (nsIWebProgressListener) — я попробовал этот подход, кажется, он вызывается только для самой страницы, а не для содержимого на странице.
  • Служба загрузки документов — глобальная версия nsIWebProgressListener, поэтому я думаю, что у нее та же проблема (только на уровне страницы)

Остаются два других, которые я еще не пробовал. Они работают глобально, поэтому вам нужно будет отфильтровать их только для браузера/страниц, которые вам интересны.

  • Наблюдатели HTTP — похоже, что это может работать, нужно убедиться, что он вызывает обратно для CSS
  • Контентная политика. Мне кажется, это лучший вариант, так как он явно предназначен для CSS, надеюсь, когда-нибудь попробую :)
person studgeek    schedule 04.05.2011