【发布时间】:2016-07-03 21:29:20
【问题描述】:
我编写了一个覆盖原生 alert() 方法的 JavaScript 代码。 我需要捕获包含 alert() 执行代码的 HTML 元素。 前两个案例是例子。我已经在 console.log 中打印了元素。
案例 1 - 捕获<script> 标签:
HTML: <script> alert(1); </script>
JS:
window.alert = function()
{
console.log(document.currentScript); // <script> is printed
}
案例 2 - 捕获<img> 标签:
HTML: <img src='1' onerror="alert(1)">
JS:
window.alert = function()
{
console.log(arguments.callee.caller.arguments[0].target);
// arguments.callee --> console.log()
// arguments.callee.caller --> onerror(event) {}
// arguments.callee.caller.arguments[0] --> event
// arguments.callee.caller.arguments[0].target --> <img>
}
案例问题 - 捕获<a> 标签:
HTML: <a href="javascript:alert(1);">Click here for alert</a>
JS:
window.alert = function()
{
console.log( // how to find <a> element)
}
请不要建议我通过包含 <a> 或类似的 ID 来修改 HTML。考虑到 HTML 是纯静态的,我无法修改任何内容。我可以只添加一个 JavaScript,但我只是想知道如何做到这一点。
【问题讨论】:
-
你可以做类似的事情。唯一的区别是点击锚点加载新页面(通常)。选中 Google 开发工具中的“保留日志”复选框以查看来自之前页面的消息。
-
"请不要建议我修改 HTML","考虑到 HTML 是纯静态的,我不能修改任何东西。"
<a>元素不包含html或者文字内容怎么点击<a href="javascript:alert(1);"></a>? -
@AlexKudryashev 不不,应用程序将在客户端运行。我需要仅使用 JS 找到
<a>元素,并将必要的数据从客户端发送到服务器。 -
@guest271314 抱歉,错过了要点击的内容。现已编辑。
标签: javascript html overriding