javascript - 被覆盖后检索/恢复 native javascript函数

标签 javascript

假设我们运行以下代码行

Object.defineProperty(HTMLElement.prototype, 'click', {value: null});

有什么方法可以恢复/恢复原始的click 功能吗?

是的,我知道可以通过 dispatchEvent 触发点击事件,但是可以用类似的方式对其进行修补。我要问的是是否有可能恢复点击事件或以某种方式在它被覆盖后触发点击功能。请假设该行代码是正在运行的第一行代码。

最佳答案

恢复原始实现的一种方法是获取对另一个框架的命名空间的引用,并重新使用该框架的实现。如果页面在 sandbox 中运行,则此方法不起作用尽管没有 allow-same-origin 标志。

// Create a new execution context and get the implementation of "click".
var frame = document.createElement('iframe');
frame.sandbox = 'allow-same-origin';
document.body.appendChild(frame);
var click = frame.contentWindow.HTMLAnchorElement.prototype.click;
frame.remove();

var a = document.createElement('a');
a.href = 'https://example.com';
document.body.appendChild(a);

// Use the implementation.
click.call(a);

a.remove();

关于javascript - 被覆盖后检索/恢复 native javascript函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29884379/

相关文章:

javascript - 动态添加删除td单元格jquery

javascript - 从 PHP 回显获取文本并使用 AJAX 更新 DIV

javascript - 一次 :true with addEventListener doesn't work on IE11 or Edge

javascript - 如何用新录制的音频覆盖部分网络音频?

javascript - 调用异步函数的客户端代码是否需要使用await?

javascript - 未选中复选框时隐藏按钮,单击“全部选中”或单击一个或多个复选框时显示按钮

javascript - 从 native 应用程序发送到 HTTPS API 的安全密码

javascript - XML文档显示

javascript - 使用原型(prototype)优于在构造函数中创建函数的优势?

javascript - 检查输入是否至少包含 8 个字符、1 个数字和 1 个字母