关于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>
比如我在网页中有一个<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>