スクリプト要素の削除は何も行いません。何らかの形でスクリプト要素にアクセスできれば、それはずっと前に実行されており、削除することは効果がありません。
だから私たちはそれを回避する必要があります。スクリプト要素は、このようなページの一番上にある場合:
<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
呼び出しを完全に無視しています。
解決策はわかりませんが、どうしてあなたはそれらを削除したいのですか(ユーザーのために追加されたようです)?誰かがコードを実行したい場合、彼はjavascriptコンソールを使うこともできますか? –
スクリプトを検出して実行を停止できる場合は、src属性を取得して(ajaxで)テキストとしてロードし、変更して実行するだけで簡単にコードを修正できます。突然変異の観測者でDOMを見ることができたら、ブラウザがスクリプトタグを追加してファイルをロードして実行する必要があります。その情報を見つけることができませんでした。あたかもそれが後であるかのように、スクリプトタグの挿入を検出することは、すでに実行されるので役に立たないでしょう。 – GillesC
文脈や問題を知らずに、ソリューションのための奇妙なアプローチのように聞こえ、頭痛を与えるような絆があるだけであることを追加したかったのです。コンテキストを説明すると、よりスマートなソリューションを提案できる人もいるかもしれません。 – GillesC