34587


JavaScript初心者です。下記のHtml中にあるアラートを出すJavaScriptを無効にしたく、html中のheadに外部リソースとして、test.jsを作成しました。しかしながら、removeChildやdisabledを設定してもアラートが表示されます。アラート表示に限らずどのようにコードを書けばHtml中の任意のJavaScriptを無効にすることができるか教えて下さい。

[code]

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="test.js">a</script>
    <title>title</title>
    </head>
    <body>
    
    <script type="text/javascript">
        alert('JavaScriptのアラート1');
    </script>
    
    <script type="text/javascript">
       alert('JavaScriptのアラート2');
    </script>
    
    </body>
    </html>
    
[/code]

test.js

[code]

    var len = document.getElementsByTagName('script').length;
    for (var i = 0; len > i; i++) {
        var target = document.getElementsByTagName('script')[i];
        document.write("<br>" + len + ":" + i + ":" + target.textContent + "</br>");
        target.parentNode.removeChild(target);
    }
    
[/code]

また、test.jsの記述場所によって実行結果が変わる理由も教えて頂けると助かります。


CC BY-SA 3.0
2017-05-09T11:17:36.910
34586
2017-05-09T11:47:38.857
21189
question
javascript
JavaScript Dom要素の無効化について


`<script>` は、特に指定しない限りは同期的に実行されHTMLのパージングをブロックします。つまり、1つ目の `<script>`
(test.js) を実行中には2番目と3番目の`<script>` は存在せず、`document.getElementsByTagName()`
の結果にそれらが含まれません。

また、test.js を `alert()` の `<script>` より後に置くと、`alert()` は既に実行済みなので手遅れになります。

`<script>`を外から無効化する一般的な手法はないのではないかと思います。

`alert()` を消すのが目的であれば、test.js 内で `alert()` の定義を置き換えるのも手です。

test.js:

[code]

    window.alert = console.log;
    
[/code]


CC BY-SA 3.0
2017-05-09T11:29:18.767
34587
2017-05-09T11:47:38.857
2017-05-09T11:47:38.857
3475
3475
34586
answer