Greasemonkey: Добавьте API GM.addStyle для стилизации страниц с ограничением CSP

Созданный на 22 нояб. 2017  ·  14Комментарии  ·  Источник: greasemonkey/greasemonkey

текущее отсутствие скриптового стиля на самом деле полная катастрофа :-(

Самый полезный комментарий

Спасибо !

Однако это делает нынешний недостаток еще более непонятным ...

Все 14 Комментарий

addStyle - это всего лишь 12 тривиальных строк кода , которые вы можете легко скопировать в свой скрипт. Или даже 11, потому что эта строка не нужна:
style.setAttribute('type', 'text/css');

Спасибо !

Однако это делает нынешний недостаток еще более непонятным ...

@arantius У меня возникла проблема с попыткой загрузить пользовательские стили на страницы, которые имеют CSP и не допускают "self" в качестве источника, поэтому я не могу просто добавить элемент <style> . GM мог бы решить эту проблему, открыв API, который вызывает tabs.insertCSS() ( ref ). Мысли?

У меня возникла проблема с попыткой загрузить пользовательские стили на страницы с CSP, которые не допускают "self" в качестве источника, поэтому я не могу просто добавить

Я зарегистрировал ошибку против Stylish, так как именно здесь я столкнулся с проблемой. Тем не менее, подумал, что это, возможно, стоит рассмотреть здесь, поскольку текущие API-интерфейсы GM в основном предоставляют привилегированные API-интерфейсы WebExt, которые обходят некоторые ограничения сценария содержимого или другие, и insertCSS является еще одним из них.

Обнаружил ошибку, упомянутую в @Sxderp (также эту ). Когда они появятся, мои предложения здесь и на Stylish станут ненужными.

Я не знаю точно, что означает «Это должно сработать, если вы включите CSS в свое расширение ...» в связанной ошибке. Динамическая вставка узла может не работать.

Я снова открою, чтобы рассмотреть CSP-безопасную функциональность. (Но с очень низким приоритетом ...)

В принципе, это также можно реализовать, не дожидаясь FF, передав сообщение фоновому скрипту и запустив tabs.insertCSS . Но после того, как ошибка будет реализована, не нужно будет прыгать через эти обручи.

@arantius 1415352 говорит: «Это должно применяться как к атрибутам HTML style и к содержимому узлов HTML <style> ».

В случае, если нет плана добавлять GM.addStyle (что очень хорошо для меня, если проблема CSP решена иным образом), я предлагаю внести поправки в это сообщение в блоге, чтобы прояснить, что не только «На сегодняшний день существует нет поддержки для […] GM_addStyle », но это не планируется и в будущем (и, возможно, также указывает на эту альтернативу ). Это может показаться очевидным, но это было не для меня (если бы я не обнаружил эту проблему, я мог бы ждать, пока эта функция будет повторно реализована, вместо того, чтобы исправлять свои скрипты прямо сейчас).

Спасибо!

Что касается полифила: с тех пор, как я услышал, что GM_addStyle находится на рубке, я фактически использовал только 3 команды для его замены. Вместо того, чтобы тестировать HEAD, я просто добавляю STYLE непосредственно в documentElement, который всегда присутствует, даже при запуске документа.

var style = document.createElement('style'); var style.textContent = `
<Stylesheet here>
`; document.documentElement.appendChild(style);

Вот версия функции, которую я использую реже, с частотой 5 строк:

addStyle = function (css) {
  var style = document.createElement('style');
  style.textContent = css;
  document.documentElement.appendChild(style);
  return style; //optional, but convenient for changing the styling later.
};

Я протестировал это в GM 3 и 4 в Firefox и TamperMonkey в Chrome, без проблем, несмотря на то, что он не является стандартным. И я предпочитаю нестандартный, а не сбой, если HEAD еще не загрузился (что случается на удивление часто. У меня были жалобы.)

Я также отмечаю, что UserStyles, org использует мой метод в качестве запасного варианта в своих автоматически сгенерированных пользовательских скриптах.

Вместо того, чтобы тестировать HEAD, я просто добавляю STYLE непосредственно в documentElement, который всегда присутствует, даже при запуске документа.

В FF57 и GM4 documentElement не всегда доступен при запуске документа, по крайней мере, на моем компьютере.

Поскольку GM 4 (на данный момент) запускает документ даже позже, чем раньше, я
не уверен, как это возможно. Но если documentElement нет,
тогда ни один из элементов не будет элементом HEAD, поскольку элемент documentElement является
HTML-элемент. который содержит элемент HEAD. Так что мой метод не
хуже.

Признаюсь, я не тестировал последнюю версию на Fx 59, в которой используется другой
метод, чтобы получить document-start, но я надеюсь, что documentElement присутствует. Если
нет, тогда всякие скрипты сломаются. Вы ничего не можете сделать с
document до того, как будет documentElement. Я даже не думаю, что ты можешь установить
наблюдателей за мутациями.

Я определенно ожидал бы, что элемент документа будет существовать в момент, когда
вводится любой сценарий содержимого.

26 декабря 2017 г., в 18:26, CoolCmd [email protected] написал:

Вместо того, чтобы тестировать HEAD, я просто добавляю СТИЛЬ прямо в
documentElement, который присутствует всегда, даже при запуске документа.
В FF57 и GM4 documentElement не всегда доступен по адресу
документ-старт, по крайней мере, на моей машине.

-
Вы получили это, потому что прокомментировали.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/greasemonkey/greasemonkey/issues/2724#issuecomment-354028964 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AFNSrmb5eKj-nY9vnR3d94bq5kIjaz9Tks5tEY7PgaJpZM4QnG03
.

Я даже не думаю, что можно создать наблюдателей за мутациями.

Вы можете прикрепить наблюдатель мутаций к document .

Была ли эта страница полезной?
0 / 5 - 0 рейтинги