在HTML中查找currentScript

时间:2016-02-25 13:51:47

标签: javascript html override

以下是示例代码:

HTML

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

JS

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

更新:上面的代码现在似乎无法正常工作(之前有效,compatibility removed for 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(),但无法捕获脚本对象。

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

有任何解决方案吗?

1 个答案:

答案 0 :(得分:1)

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

&#13;
&#13;
<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>
&#13;
&#13;
&#13;