スクリプト要素を削除しても何も起こりません。何らかの方法でスクリプト要素にアクセスできる場合、それはかなり前に実行されたものであり、削除しても効果はありません。
したがって、これを回避する必要があります。スクリプト要素が次のようにページの上部にある場合:
<head>
<script src="yourscript.js"></script>
同じページに対して同期 ajax 要求を行うことができるため、そのコンテンツを新しいドキュメントに解析し、すべてのスクリプト タグを変更してから、現在のドキュメントを変更されたドキュメントに置き換えることができます。
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);
残念ながら、これは jsfiddle や jsbin では設定できません。ただし、このコードをそのままコピーして、Google Chrome のこのページのコンソールに貼り付けることができるはずです。アラートが表示され、ライブ DOM を調べると、各スクリプトが変更されているはずです。
違いは、ページ上でスクリプトが実行された後にこれを実行しているため、古いスクリプトがページ上で機能しているはずです。そのため、これが機能するためには、ページ上で最初にスクリプトを実行する必要があります。
google chrome で動作確認済みです。Firefox はdoc.write
、何らかの理由で呼び出しを完全に無視しています。