在HTML中查找currentScript

uni*_*oot 6 html javascript overriding

这是一个示例代码:

HTML

<script> alert('This is alert!') </script>
Run Code Online (Sandbox Code Playgroud)

JS

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

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


问题:

HTML

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

JS

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

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

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

有解决方案吗?

myf*_*myf 1

在最简单的情况下,当您的重写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>
Run Code Online (Sandbox Code Playgroud)