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.我无法在任何浏览器中获取脚本对象.
有解决方案吗?
在最简单的情况下,当您的重写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)
| 归档时间: |
|
| 查看次数: |
435 次 |
| 最近记录: |