Possível modificar o DOM durante/antes da análise inicial do DOM?
-
24-09-2019 - |
Pergunta
É possível modificar o DOM durante ou antes da análise inicial do DOM? Ou tenho que esperar até que o DOM seja analisado e construído antes de interagir com ele? Mais especificamente, é possível impedir um elemento de script no DOM de executar usando scripts de scripts/conteúdo do Usuários ou similares no Chrome ou Firefox?
Tentei usar o EventListenners no DomNodeInsert antes do DOM ser analisado, mas estes são disparados apenas após a construção do DOM.
Solução
Estas são duas perguntas separadas:
1. É possível modificar o DOM durante ou antes da análise inicial do DOM?
Sim. Assim que o navegador criar o elemento raiz, você poderá começar a consultar e mudar o DOM. Observe que, quando o seu script é executado, parte da página ainda pode ser incomparável, talvez até mesmo em trânsito na rede. Seu script geralmente tem acesso a qualquer elemento declarado na fonte antes da A tag de script que contém/chama seu script. Isso inclui elementos pais que contêm sua tag de script.
2. É possível impedir um elemento de script no DOM de executar usando scripts de scripts/conteúdo ou similares no Chrome ou Firefox?
Não. Todos os scripts são executados e um script não pode impedir a execução inicial de outro script. No entanto, talvez você possa voltar e remover os manipuladores de eventos e tentar neutralizar o efeitos de um script. Embora esse cenário pareça um pouco sombrio e/ou contra o grão de uso normal de JavaScript.
Outras dicas
Na verdade, eu analisei muito isso ao desenvolver um adblocker para o Chrome. Basicamente, você não pode usar apenas JavaScript para interromper o JavaScript, especialmente porque ele funcionaria simultaneamente com o elemento de script em questão. Portanto, mesmo que funcionasse, causaria um condição de corrida.
Você pode modificar elementos durante a análise de documentos, mas depois que esse elemento foi adicionado ao DOM. por exemplo
<div id="example"></div>
<script>
document.getElementById('example').innerHTML = 'hello';
</script>
<div>something else</div>
É possível modificar o DOM durante ou antes da análise inicial do DOM?
Sim, é possível.
Comece impedindo completamente o documento de ser analisado por completo e, em seguida, busque o mesmo documento, faça qualquer processamento neste documento e, em seguida, injete o documento resultante na página.
Aqui está como eu atualmente faço exatamente isso https://stackoverflow.com/a/36097573/6085033