gpt4 book ai didi

javascript - 如何从点击事件中丢失可信上下文

转载 作者:行者123 更新时间:2023-11-30 19:54:20 32 4
gpt4 key购买 nike

我正在尝试创建一个用户脚本,使 native 弹出窗口阻止程序应用于所有弹出窗口,即使是那些由用户交互产生的弹出窗口。

我想到了以下想法:

window.addEventListener('click', function(e) {
console.log(e.isTrusted);
if (e.isTrusted) {
e.stopImmediatePropagation();
e.preventDefault();
e.target.dispatchEvent(new e.constructor(e.type, e));
}
}, true);

button.addEventListener('click', function(e) {
window.open('about:blank');
});
<button id="button">Test</button>

(由于 iframe 沙盒,在代码段 window.open 中将无法工作。)

基本上,我们的想法是向页面添加一个事件监听器,用不受信任的副本替换任何受信任的点击事件。但是,这不起作用,弹出窗口仍处于打开状态。

有什么办法可以做到这一点吗?

相关规范在这里: https://html.spec.whatwg.org/multipage/interaction.html#triggered-by-user-activation

最佳答案

这只是回答了XY 问题X 部分,因为我认为Y 没有实际用处。支持>

如果您希望阻止所有弹出窗口,那么 window.open = null; 将已经阻止所有由此方法生成的弹出窗口,那么您可能还想阻止来自 anchor 元素的弹出窗口,

document.addEventListener('click', e => {
if(e.target.nodeName === 'A' && e.target.target === "_blank") {
e.preventDefault();
}
});

现在,您必须在所有文档中应用它(即也在 iframe 中),您应该会很好。

但请注意,页面打开弹出窗口有很多正当理由,禁用它肯定会破坏很多网站。

关于javascript - 如何从点击事件中丢失可信上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54174382/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com