关于JavaScript:script标签中包含的js文本加载后执行前,是否可以修改其内容?

About JavaScript: Can I modify the contents of a script tag after the js text contained in it is loaded and before it is executed?

比如我在网页中有一个<script> alert(1) <script>。现在我想做的是在加载之后和执行之前立即将其更改为 <script> alert (2) <script> 。我能成功吗?

假设您像这样设置脚本标签

<script type='text/javascript' id='hello'>
    alert(1)
</script>

然后你可以像这样得到 dom 元素:

var h = document.getElementById('hello');

然后您可以像这样修改元素:

h.innerHTML = 'alert(2)'

我还建议您使用 JQuery onready 之类的东西来确保修改代码在脚本标记中的警报之前执行。

简短的回答是否定的;仅通过在服务之前修改页面

如您所见,无法使用脚本拦截脚本

解析时执行

window.addEventListener("DOMContentLoaded",function() {
  document.scripts[1].textContent = "";
  alert(2)
})
<script>alert(1)</script>

这是一个技巧

window.addEventListener("DOMContentLoaded",function() {
  alert(3)
})
<script>// if you can insert this before you can intercept alert
const saveAlert = window.alert;
window.alert = function(str) {
  saveAlert(2)
  window.alert = saveAlert;
};
</script>
<script>alert(1)</script>

证明其他答案无效

var h = document.getElementById('hello');
h.textContent = 'alert(2)'
<script type='text/javascript' id='hello'>
    alert(1)
</script>