以下是示例代码:
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。我无法在任何浏览器中获取脚本对象。
有任何解决方案吗?
答案 0 :(得分: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>
&#13;