我曾经写过这个剧本,这对我来说比任何其他启用右键点击的扩展程序都更好。
function rightClickEvent(event) {
event.stopPropagation();
return true;
}
function enableRightClick(elements) {
if (elements.length === 0) return;
Array.prototype.slice.call(elements, 0).forEach(element => {
element.addEventListener('contextmenu', rightClickEvent, true);
enableRightClick(element.children);
});
}
enableRightClick(document.children);
它似乎有点矫枉过正,因为它为整个页面上的每个元素添加了一个动作侦听器。有没有办法实现类似的结果,比如拦截oncontextmenu
的每个事件,而不必遍历整个页面的DOM?
为了澄清,这是为了在按钮上的上下文菜单的简单更改不起作用的环境中启用右键单击。
答案 0 :(得分:1)
我建议你只使用document.getElementsByTagName("*")
来获取文档中所有元素的nodeList
,而不是自己递归地遍历层次结构。
并且,为了完整起见,您可能必须在挂机后监视插入到页面中的DOM元素。
如何解决禁用右键单击的页面完全取决于页面如何实现禁用。如果你想要一个处理它可能禁用它的最可能方法的方法,那么你必须像叶片节点和每个节点一样处理它 - 没有别的办法。使用事件传播来处理更高级别的事件的任何更简单的选项都可能被页面中的JS阻止,因此如果您试图避免被阻止,那么您必须在叶节点处理它。