代码之家  ›  专栏  ›  技术社区  ›  Arkadiusz Kałkus

如何禁止用户从DOM中手动删除HTML元素?

  •  2
  • Arkadiusz Kałkus  · 技术社区  · 6 年前

    在web开发中,创建一个位置固定、背景颜色透明的元素,覆盖整个页面,直到用户以某种方式进行交互(通过接受同意或付费服务)是非常流行的想法然后删除元素,用户可以使用该网页。

    下面是一个例子:

    enter image description here

    但是,用户可以使用浏览器中的开发工具手动删除元素。

    有什么办法可以预防吗?是否可以禁止删除某些特定元素?

    4 回复  |  直到 6 年前
        1
  •  8
  •   Quentin    6 年前

    你不能。

    浏览器属于用户,完全由用户控制。

    如果你不想在他们接受条件之前给他们提供什么,那么 不要将内容发送到浏览器 直到他们有。

        2
  •  1
  •   Liftoff    6 年前

    这是不可能的你可以让用户更难绕过它,但是你不能阻止他们从页面中删除它。

    我见过网站使用很多不同的解决方案来增加浏览难度,从锁定页面滚动到完全删除弹出窗口后面的内容,但最终无法阻止用户修改DOM。

        3
  •  0
  •   Nolyurn    6 年前

    您需要添加控制服务器端。 您的用户可以控制他们接收的数据如果不想让他们访问数据,请不要发送数据。

        4
  •  0
  •   Arkadiusz Kałkus    6 年前

    只要不可能阻止用户删除某个元素,就可以检测到该元素的删除。

    这个 MutationObserver API允许我们检测特定DOM元素的更改。

    以下是示例 Jakub Jankiewicz

    var in_dom = document.body.contains(element);
    var observer = new MutationObserver(function(mutations) {
        if (document.body.contains(element)) {
            if (!in_dom) {
                console.log("element inserted");
            }
            in_dom = true;
        } else if (in_dom) {
            in_dom = false;
            console.log("element removed");
        }
    
    });
    observer.observe(document.body, {childList: true});
    

    当元素被删除时,我们当然可以再次添加它,或者重定向到错误页,指示对该页的任何操作都是非法的。

    尤其是删除元素很容易 this React extension . 如果我们使用React,那么我们可以将要防止被删除的元素包装在组件中:

    import { WatchForRemoval } from 'react-mutation-observer';
    
    ...
    
    <WatchForRemoval onRemoval={console.log.bind(null, 'Child removal triggered.')}>
      <div>
        Removing this element will trigger callback
      </div>
    </WatchForRemoval>