La eliminación de un elemento de script no hace nada. Si de alguna manera puede acceder a un elemento de script, se ejecutó hace mucho tiempo y eliminarlo no tendrá ningún efecto.
Así que tenemos que evitarlo. Si el elemento de script se encuentra en la parte superior de la página como esta:
<head>
<script src="yourscript.js"></script>
se puede hacer una petición ajax sincrónica a la misma página, por lo que puede analizar su contenido en un documento nuevo, modificar todas las etiquetas de secuencia de comandos y luego reemplace el documento actual con el documento modificado.
var xhr = new XMLHttpRequest,
content,
doc,
scripts;
xhr.open("GET", document.URL, false);
xhr.send(null);
content = xhr.responseText;
doc = document.implementation.createHTMLDocument(""+(document.title || ""));
doc.open();
doc.write(content);
doc.close();
scripts = doc.getElementsByTagName("script");
//Modify scripts as you please
[].forEach.call(scripts, function(script) {
script.removeAttribute("src");
script.innerHTML = 'alert("hello world");';
});
//Doing this will activate all the modified scripts and the "old page" will be gone as the document is replaced
document.replaceChild(document.importNode(doc.documentElement, true), document.documentElement);
Desafortunadamente, esto no se puede configurar en jsfiddle o jsbin. Pero debería poder copiar y pegar este código exactamente como está en la consola de esta página en google chrome. Debería ver las alertas y cuando inspecciona el dominio en vivo, cada script se modificó.
La diferencia es que estamos ejecutando esto después de que los scripts se hayan ejecutado en la página, por lo que los scripts antiguos aún deberían tener un efecto de trabajo en la página. Es por eso que, para que esto funcione, debe ser el primer script en la página para hacerlo.
Probado para trabajar en google chrome. Firefox está ignorando por completo la llamada doc.write
por algún motivo.
No conozco una solución, pero tengo una pregunta: ¿Por qué quieres eliminarlas (parece que se agregan debido a un usuario)? Si alguien quiere ejecutar código, ¿también puede usar una consola de JavaScript? –
Modificar el código si puede detectar la secuencia de comandos y evitar que se ejecute debe ser fácil, ya que puede simplemente agarrar el atributo src, cargarlo como texto (en ajax), modificarlo y ejecutarlo.Después de poder ver el DOM con observadores de mutación, para que funcione, el navegador deberá agregar la etiqueta del script antes de cargarlo y ejecutar el archivo, y no pude encontrar ninguna información al respecto. Como si fuera el último, entonces la detección de la inserción de las etiquetas del script será inútil ya que ya se ejecutarán. – GillesC
Solo quería agregar, sin saber el contexto o el problema, que suena como un enfoque extraño para una solución y es un enlace que le da muchos dolores de cabeza. Si explica el contexto, quizás algunos puedan sugerir una solución más inteligente – GillesC