La rimozione di un elemento di script non fa nulla. Se è possibile accedere in qualche modo a un elemento di script, è stato eseguito molto tempo fa e rimuoverlo non avrà alcun effetto.
Quindi abbiamo bisogno di aggirare. Se il vostro elemento script è nella parte superiore della pagina come questa:
<head>
<script src="yourscript.js"></script>
si potrebbe fare una richiesta AJAX sincrona alla stessa pagina, in modo da poter analizzare il suo contenuto in un nuovo documento, modificare tutti i tag di script e poi sostituire il documento corrente con il documento modificato.
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);
Purtroppo questo non può essere impostato in jsfiddle o jsbin. Ma dovresti riuscire a copiare incollare questo codice esattamente come nella console della pagina in google chrome. Dovresti vedere gli avvisi e quando controlli il live dom, ogni script è stato modificato.
La differenza è che stiamo eseguendo questo dopo che gli script sono stati eseguiti sulla pagina, quindi i vecchi script dovrebbero ancora avere un effetto di lavoro sulla pagina. Ecco perché, per far funzionare tutto questo, devi essere il primo script della pagina a farlo.
Testato per funzionare in google chrome. Firefox ignora completamente la chiamata doc.write
per qualche motivo.
Non conosco una soluzione, ma ho una domanda: perché vuoi rimuoverli (sembra che vengano aggiunti a causa di un utente)? Se qualcuno vuole eseguire codice, può anche usare una console javascript? –
Modificare il codice se riesci a rilevare lo script e fermarlo dall'esecuzione dovrebbe essere facile, in quanto puoi semplicemente prendere l'attributo src, caricarlo come testo (in ajax), modificarlo ed eseguirlo.Dopo aver visto il DOM con gli osservatori di mutazione, tuttavia, affinché funzioni, il browser dovrà aggiungere il tag dello script prima di caricare ed eseguire il file e non sono riuscito a trovare alcuna informazione al riguardo. Come se fosse il dopo, il rilevamento dell'inserimento dei tag dello script sarà inutile in quanto verranno già eseguiti. – GillesC
Volevo solo aggiungere, senza conoscere il contesto o il problema, che sembra un approccio strano per una soluzione ed è un legame che ti dà molti mal di testa. Se spieghi il contesto, alcuni potrebbero suggerire una soluzione più intelligente. – GillesC