Greasemonkey: Adicione uma API GM.addStyle, para estilizar páginas restritivas a CSP

Criado em 22 nov. 2017  ·  14Comentários  ·  Fonte: greasemonkey/greasemonkey

a atual falta de estilo de script é na verdade um desastre completo :-(

Comentários muito úteis

Obrigado !

No entanto, isso torna a falta atual ainda mais incompreensível ...

Todos 14 comentários

addStyle são apenas 12 linhas triviais de código , que você pode copiar e colar facilmente em seu script. Ou até 11, porque essa linha não é necessária:
style.setAttribute('type', 'text/css');

Obrigado !

No entanto, isso torna a falta atual ainda mais incompreensível ...

@arantius Tenho um problema ao tentar carregar estilos de usuário em páginas que têm CSP e não permitem "self" como origem - então, não posso simplesmente adicionar um elemento <style> . A GM poderia resolver isso expondo uma API que chama tabs.insertCSS() ( ref ). Pensamentos?

Eu tenho um problema ao tentar carregar estilos de usuário em páginas que têm CSP e não permitem "self" como uma origem - então não posso simplesmente adicionar um

Registrei um bug contra o Stylish, pois foi aí que me deparei com o problema. Ainda assim, pensei que poderia valer a pena considerar aqui, uma vez que as APIs atuais da GM expõem principalmente APIs WebExt privilegiadas que contornam alguma restrição de script de conteúdo ou outra, e insertCSS é outra dessas.

Encontrado o bug @Sxderp referido (também este ). Quando isso acontecer, minhas sugestões aqui e no Stylish serão desnecessárias.

Não sei exatamente o que "Isso deve funcionar se você agrupar o CSS em sua extensão ..." significa, no bug vinculado. A inserção de nó dinâmico pode não funcionar.

Vou reabrir para considerar a funcionalidade segura do CSP. (Mas com uma prioridade realmente baixa ...)

Em princípio, isso também poderia ser implementado sem esperar por FF, passando uma mensagem para o script de segundo plano e executando tabs.insertCSS . Mas saltar por cima desses obstáculos não será necessário depois que o bug for implementado.

@arantius 1415352 diz "Isso deve se aplicar aos atributos HTML style e ao conteúdo dos nós HTML <style> ."

Caso não haja planos para adicionar GM.addStyle (o que é muito bom para mim se o problema do CSP for resolvido de outra forma), sugiro alterar esta postagem do blog para deixar claro que não apenas “A partir de hoje, há nenhum suporte para […] GM_addStyle ”, mas que nenhum está planejado no futuro também (e talvez aponte para esta alternativa também). Isso pode parecer óbvio, mas não era para mim (se eu não tivesse encontrado esse problema, poderia estar esperando o recurso ser reimplementado em vez de corrigir meus scripts agora).

Obrigado!

Em relação ao polyfill: desde que ouvi que GM_addStyle estava no bloco de corte, na verdade, usei apenas 3 comandos para substituí-lo. Em vez de testar o HEAD, apenas adiciono o STYLE diretamente ao documentElement, que está sempre presente, mesmo no início do documento.

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

Esta é a versão da função que uso mais raramente, que tem 5 linhas:

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

Já testei no GM 3 e 4 no Firefox, e no TamperMonkey no Chrome, sem problemas, apesar de não ser padrão. E eu prefiro não padronizado a que ele falhe se o HEAD ainda não tiver sido carregado (o que acontece com uma frequência surpreendente. Tive reclamações).

Também observo que UserStyles, org usa meu método como um fallback em seus scripts de usuário gerados automaticamente.

Em vez de testar o HEAD, apenas adiciono o STYLE diretamente ao documentElement, que está sempre presente, mesmo no início do documento.

No FF57 e GM4, documentElement nem sempre está disponível no início do documento, pelo menos na minha máquina.

Já que GM 4 (por agora) tem início de documento ainda mais tarde do que antes, estou
não tenho certeza de como isso é possível. Mas se o documentElement não estiver presente,
então nenhum será o elemento HEAD, uma vez que o documentElement é o
Elemento HTML. que é o que contém o elemento HEAD. Então meu método não é
qualquer pior.

Admito que não testei o dev mais recente no Fx 59, que usa um diferente
para obter o início do documento, mas espero que o documentElement esteja presente. Se
não, então todos os tipos de scripts serão interrompidos. Você não pode fazer nada para o
documento antes de haver um documentElement. Eu nem acho que você pode definir
observadores de mutação.

Eu definitivamente esperaria que o elemento do documento existisse no ponto em que
qualquer script de conteúdo é injetado.

Na terça - feira, 26 de dezembro de 2017 às 18:26, CoolCmd

Em vez de testar o HEAD, apenas adiciono o STYLE diretamente ao
documentElement, que está sempre presente, mesmo no início do documento.
No FF57 e GM4, documentElement nem sempre está disponível em
document-start, pelo menos na minha máquina.

-
Você está recebendo isso porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/greasemonkey/greasemonkey/issues/2724#issuecomment-354028964 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/AFNSrmb5eKj-nY9vnR3d94bq5kIjaz9Tks5tEY7PgaJpZM4QnG03
.

Eu nem acho que você pode configurar observadores de mutação.

Você pode anexar o observador de mutação a document .

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

simonzack picture simonzack  ·  8Comentários

xravian picture xravian  ·  8Comentários

Sasstraliss picture Sasstraliss  ·  10Comentários

GuardianMajor picture GuardianMajor  ·  11Comentários

Powersource picture Powersource  ·  5Comentários