在 HTML 中查找当前脚本

Finding currentScript in HTML

本文关键字:脚本 查找 HTML      更新时间:2023-09-26

下面是一个示例代码:

.HTML

<script> alert('This is alert!') </script>

.JS

window.alert = function(data)  //alert() over-riding
{
    scriptObject = document.currentScript; //gives me <script> object
}

更新:上面的代码现在似乎不起作用(它更早工作,IE的兼容性被删除)在Internet Explorer 11.420.10586.0中。为什么它能够在Chrome,Firefox,Safari和Microsoft Edge中找到Script对象,但在Internet Explorer中找不到?有没有其他方法?


问题:

.HTML

<script> ReferenceError.prototype.__defineGetter__('name', function fff() { javascript:alert(1) }),x </script>

.JS

window.alert = function(data)  //alert() over-riding
{
    scriptObject = ? // I need to get the Script object
}

我试图arguments.callee.caller找到fff(),但无法捕获脚本对象。

对于上述脚本,Alert() 不会在 Chrome 中执行。请改用火狐浏览器。我无法在任何浏览器中获取脚本对象。

请问有什么解决方案吗?

在最简单的情况下,当在(阻止)脚本中立即调用被覆盖的alert时,简单的document.scripts[document.scripts.length-1]可能很好:

<pre id="log"></pre>
<script>
window.alert = function(a){
 log.innerText += a + ' ' + document.scripts[document.scripts.length-1].outerHTML + ''n';
}
</script>
<script id="a">alert('first')</script>
<script id="b">alert('second')</script>
<script id="c">alert('third')</script>