引子:最近在写一个插件,想办法干掉 CSDN 中不登录无法复制的问题。找到了触发登录弹窗的方法:目标dom上绑定了 copy() 方法{ dom.bind('copy', () => {}) }。 要移除这个方法。
找到一个比较残暴的方案:克隆
克隆整个节点并使用克隆的替换该节点
dom.replaceWith(dom.cloneNode(true));
// dom 要被替换的元素
// true:参数,为 true 时,所有子元素也一并被克隆
1. 摧毁所有的监听和事件执行(除行内事件)
2. 内部监听器(行内事件)会被保留下来,这意味着一个onclick 属性中的方法仍然会按照定义触发
<button id="button" onclick="console.log('clicked!')"></button>
// button 的 onclick 属性会被执行