текущее отсутствие скриптового стиля на самом деле полная катастрофа :-(
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 является еще одним из них.
Я не знаю точно, что означает «Это должно сработать, если вы включите 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
.
Самый полезный комментарий
Спасибо !
Однако это делает нынешний недостаток еще более непонятным ...