Greasemonkey: Agregue una API GM.addStyle, para diseñar páginas restrictivas de CSP

Creado en 22 nov. 2017  ·  14Comentarios  ·  Fuente: greasemonkey/greasemonkey

la falta actual de estilo de secuencias de comandos es en realidad un completo desastre :-(

Comentario más útil

Gracias !

Sin embargo, eso hace que la falta actual sea aún más incomprensible ...

Todos 14 comentarios

addStyle son solo 12 líneas triviales de código , que puede copiar y pegar fácilmente en su script. O incluso 11, porque esta línea no es necesaria:
style.setAttribute('type', 'text/css');

Gracias !

Sin embargo, eso hace que la falta actual sea aún más incomprensible ...

@arantius Tengo un problema al intentar cargar estilos de usuario en páginas que tienen CSP y no permiten "self" como origen, por lo que no puedo simplemente agregar un elemento <style> . GM podría resolver esto exponiendo una API que llame a tabs.insertCSS() ( ref ). ¿Pensamientos?

Tengo un problema al intentar cargar estilos de usuario en páginas que tienen CSP y no permiten "self" como origen, por lo que no puedo simplemente agregar un

Presenté un error contra Stylish porque ahí es donde me encontré con el problema. Aún así, pensé que podría valer la pena considerarlo aquí, ya que las API actuales de GM exponen principalmente las API de WebExt privilegiadas que eluden alguna restricción de scripts de contenido u otra, e insertCSS es otra de esas.

Encontré el error al que se refiere este ). Cuando esos aterricen, mis sugerencias aquí y en Stylish serán innecesarias.

No sé exactamente qué significa "Esto debería funcionar si agrupa el CSS en su extensión ...", en el error vinculado. Es posible que la inserción dinámica de nodos no funcione.

Volveré a abrir para considerar la funcionalidad segura para CSP. (Pero con una prioridad realmente baja ...)

En principio, esto también podría implementarse sin esperar FF pasando un mensaje al script en segundo plano y ejecutando tabs.insertCSS . Pero saltar a través de esos aros no será necesario una vez que se implemente ese error.

@arantius 1415352 dice "Esto debería aplicarse tanto a los atributos HTML style como al contenido de los nodos HTML <style> ".

En caso de que no haya un plan para agregar un GM.addStyle (lo cual está muy bien para mí si el problema de CSP se resuelve de otra manera), sugiero enmendar esta publicación de blog para dejar en claro que no solo “A partir de hoy, hay no hay soporte para […] GM_addStyle ”, pero tampoco hay ninguno planeado en el futuro (y tal vez apunte a esta alternativa también). Eso puede parecer obvio, pero no lo fue para mí (si no hubiera encontrado este problema, podría estar esperando que se vuelva a implementar la función en lugar de corregir mis scripts en este momento).

¡Gracias!

Con respecto al polyfill: desde que escuché que GM_addStyle estaba en el bloque de corte, en realidad solo usé 3 comandos para reemplazarlo. En lugar de probar HEAD, simplemente agrego STYLE directamente al documentElement, que siempre está presente, incluso al inicio del documento.

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

Aquí está la versión de la función que uso con menos frecuencia, que se registra en 5 líneas:

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.
};

Probé esto en GM 3 y 4 en Firefox, y TamperMonkey en Chrome, sin problemas, a pesar de no ser estándar. Y prefiero que no sea estándar a que falle si el HEAD aún no se ha cargado (lo que sucede sorprendentemente a menudo. He tenido quejas).

También observo que UserStyles, org usa mi método como respaldo en sus scripts de usuario generados automáticamente.

En lugar de probar HEAD, simplemente agrego STYLE directamente al documentElement, que siempre está presente, incluso al inicio del documento.

En FF57 y GM4, documentElement no siempre está disponible al inicio del documento, al menos en mi máquina.

Dado que GM 4 (por ahora) ha iniciado el documento incluso más tarde que antes, estoy
No estoy seguro de cómo es posible. Pero si el documentElement no está presente,
entonces tampoco será el elemento HEAD, ya que documentElement es el
Elemento HTML. que es lo que contiene el elemento HEAD. Entonces mi método no es
algo peor.

Admito que no he probado el último desarrollador en Fx 59, que usa un
método para iniciar el documento, pero espero que el elemento documentElement esté presente. Si
no, entonces se romperán todo tipo de secuencias de comandos. No puedes hacerle nada al
document antes de que haya un documentElement. Ni siquiera creo que puedas establecer
hasta los observadores de mutaciones.

Definitivamente, esperaría que el elemento del documento exista en el momento en que
se inyecta cualquier guión de contenido.

El martes 26 de diciembre de 2017 a las 6:26 p.m., CoolCmd [email protected] escribió:

En lugar de probar HEAD, simplemente agrego el ESTILO directamente al
documentElement, que siempre está presente, incluso al inicio del documento.
En FF57 y GM4, documentElement no siempre está disponible en
document-start, al menos en mi máquina.

-
Estás recibiendo esto porque hiciste un comentario.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/greasemonkey/greasemonkey/issues/2724#issuecomment-354028964 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AFNSrmb5eKj-nY9vnR3d94bq5kIjaz9Tks5tEY7PgaJpZM4QnG03
.

Ni siquiera creo que puedas configurar observadores de mutaciones.

Puede adjuntar un observador de mutación a document .

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

simonzack picture simonzack  ·  8Comentarios

Powersource picture Powersource  ·  5Comentarios

an-electric-sheep picture an-electric-sheep  ·  11Comentarios

darkred picture darkred  ·  5Comentarios

GuardianMajor picture GuardianMajor  ·  11Comentarios