Как остановить Firefox от загрузки и применения CSS через расширение Firefox? - PullRequest
1 голос
/ 16 марта 2010

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

Так что я уже давно бьюсь над этим вопросом и перебрал все свои варианты. Мой текущий подход к отмене 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.

Есть предложения?

Спасибо

Sam

Ответы [ 3 ]

2 голосов
/ 26 марта 2010

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

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 голос
/ 14 апреля 2010

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

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

0 голосов
/ 04 мая 2011

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

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

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

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

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

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

  • HTTP Observers - похоже, что он может работать, нужно убедиться, что он перезванивает для CSS
  • Политика в отношении контента - мне кажется, это лучший вариант, поскольку он явно вызывается для CSS, и я надеюсь когда-нибудь попробовать его:)
...