css 如何防止用户通过扩展与网页交互?

qvk1mo1f  于 2023-03-24  发布在  其他
关注(0)|答案(2)|浏览(124)

我正在创建一个扩展,它应该显示一个覆盖并突出显示光标所在的元素。当覆盖可见时,用户应该无法与页面交互(按钮,链接等不应该工作)。
代码:

let overlay = document.createElement("div");
overlay.setAttribute("class", "as-overlay");

let panel = document.createElement("div");
panel.setAttribute("class", "as-root");
panel.setAttribute("id", "as-panel");
overlay.appendChild(panel);
document.body.appendChild(overlay);

____

.as-overlay {
  position: fixed;
  top: 0px;
  left: 0px;
  right: 0px;
  bottom:0px;
  z-index: 99999;
  cursor: default;
  pointer-events: none !important;
  background-color: rgba(0, 0, 0, 0.8);
}

我将pointer-events设置为none,以禁用交互。但它不起作用。我做错了什么吗?(我已经确保覆盖层具有完整的宽度和高度,并且它的z-index足够高,以便它在所有内容之上呈现。)
如果能提供一些帮助,我会非常感激,我已经在这个问题上花了很长时间了,某个大型语言模型没有任何帮助;-;
编辑:我添加了一个example。理想情况下,你会期望点击按钮或链接不做任何事情,因为覆盖在那里。但点击它们的工作,我只是不明白为什么。

mf98qq94

mf98qq941#

根据pointer-events的描述
除了指示元素不是指针事件的目标之外,值none还指示指针事件“通过”元素并将该元素“下面”的任何内容作为目标。
你所需要做的就是删除pointer-events: none,这应该可以解决你的问题。至少它可以解决你提供的例子。

pxy2qtax

pxy2qtax2#

对于初学者来说,这两个必须切换,因为你不能在没有“覆盖”的情况下放置“面板”。即使JS允许你这样做,这也是非常不合逻辑的,会伤害我的大脑!

overlay.appendChild(panel);
document.body.appendChild(overlay);

但无论如何,如果你已经用“裹尸布”覆盖了整个页面,那么谁会关心指针事件呢?:)
他们会点击你的裹尸布,所以如果你没有在上面添加点击事件......到底是什么问题?

相关问题