首页 > 其他分享 >基于mutation的自定义指令以监听用户使用f12修改dom

基于mutation的自定义指令以监听用户使用f12修改dom

时间:2023-10-24 17:33:11浏览次数:38  
标签:el const 自定义 dom mutation passwordInput input password 监听

昨天写了功能后,就又封了一个指令,可以直接应用于ui框架的input组件上

贴贴:

preventChange/index.js 
export const preventChange = {
  inserted(el, binding) {
    const elTag = el.tagName.toLowerCase();
    // 获取当前dom下类型为password的input标签
    const passwordInput = el.querySelector(`${elTag}  input[type="password"]`);
    // if has psdipt
    if (passwordInput) {
      const config = {
        attributes: true, // 监听到修改属性时触发
        childList: false,
        subtree: false
      };
      // 以上述配置开始观察目标节点
      const observeInstance = new MutationObserver(mutationsList => {
        for (let mutation of mutationsList) {
          if (mutation.type === "attributes") {
            passwordInput.type = "password";
            // 停止监听,一定要有这一步,否则页面将直接卡死!
            observeInstance.disconnect();
            // 随即重新监听
            observeInstance.observe(passwordInput, config);
          }
        }
      });
      observeInstance.observe(passwordInput, config); // 监听paswd
      passwordInput.__mutationObserver = observeInstance;
    }
  },
  unbind(el) {
    const elTag = el.tagName.toLowerCase();
    const passwordInput = el.querySelector(`${elTag}  input[type="password"]`);
    if (passwordInput) {
      const observer = passwordInput.__mutationObserver;
      if (observer) {
        //  observer.disconnect && observer.disconnect();
         delete passwordInput.__mutationObserver;
      }
    }
  }
};

使用:

<el-input v-model="input" type="password" v-preventChange placeholder="请输入内容"></el-input>

其实还可以再进一步判断当前dom是不是input[type="password"],但K桑实在是太懒了
此自定义指令作用为:屏蔽用户打开f12试图修改密码输入框以查看明文密码。至于注册是全局还是局部,诸君请便。

以上。

标签:el,const,自定义,dom,mutation,passwordInput,input,password,监听
From: https://www.cnblogs.com/hjk1124/p/17785363.html

相关文章

  • web基础漏洞-dom型xss测试
    1、介绍dom型xss的测试是非常繁琐的,很难如同其它漏洞那样基于自动化分析是否存在该漏洞。搜索js的关键词分析上下文中攻击者可控的参数与流程2、分析工具(1)搜索js关键词针对单个请求的响应体部,搜索js关键词,列举搜索结果针对日志的请求队列,逐一搜索js关键词,列出请求序号......
  • LambdaUpdateWrapper 自定义修改
    当我们想要在原有的数据上添加新的数据的时候,我们需要一个更新操作,但是<Iservice>接口一般是根据ID进行修改当我们需要根据指定的条件设置值时,就需要自己写SQL但是这个办法会出现SQL错误并且很麻烦所以我们可以自定义一个wrapper来进行修改。 这是全部的代码 这是我们要......
  • 【ChatGPT系列】Python自定义打印各种颜色的日志
    如何在控制台和文件中同时输出日志?要将日志同时输出到文件和控制台,可以创建并配置一个额外的StreamHandler,然后将其添加到Logger中。下面是一个示例代码,演示如何将日志同时输出到文件和控制台:importlogging#创建Logger对象logger=logging.getLogger("example_logger")......
  • Java:自定义实现SpringBoot Starter
    (目录)1、自定义Starter1.1、项目结构$tree.├──pom.xml└──src├──main│├──java││└──com││└──example││└──demo││├──ReadingConfiguration.java......
  • BOM、DOM、事件监听
    BOM概念:BrowserObjectModel浏览器对象模型,允许JavaScript与浏览器对话,JavaScript将浏览器的各个组成部分封装为对象组成:Window:浏览器窗口对象Navigator:浏览器对象Screen:屏幕对象History:历史记录对象Location:地址栏对象 Window:浏览器窗口对......
  • grafana 配置自定义dashboard
    本文为博主原创,转载请注明出处:1.配置数据源         配置完成后,点击SaveAndTest,如果配置正确,页面则显示如下:           2.配置dashboard          点击Addnewpanel后,界面如下:       ......
  • 记录EF 排序配上自定义的比较器
    记录EF排序配上自定义的比较器前言要求页面文件显示的时候能够按照序号去排序要求如下:数据库有一个列存放文件名,如:1.1文件1.2文件1.1.1文件1.1.11文件1.0.txt1.1.2(文件).pdf现在需要实现查询的时候按照这个列排序,并且是按照序号排序。查询的时候是按层级查询的,每次查......
  • IDEA工具第二篇:自定义Java方法注释模板
    网上搜索类似的文章有很多,但是一味的复制粘贴总会出现各种奇葩问题,最后然并卵!今天特意自己研究琢磨一下,将最终结果分享给大家,100%亲测可用。一、说明想必大家都用过Eclipse的方法注释生成,方法上输入/**,回车走你,巴拉巴拉如下的注释便生成了,今天就悄悄告诉大家如何自定义这样的模......
  • mysql 自定义函数的调用及赋值
    函数调用:select函数名(参数);函数返回值赋值:set变量名=(select函数名(参数));select函数名(参数)into变量名;示例:自定义函数内容 selecttest4(5)intoaa;setbb=(selecttest4(10));selectaa,bb; ......
  • 视频直播系统源码,在Laravel中自定义模板函数 并在模板中调用
    视频直播系统源码,在Laravel中自定义模板函数并在模板中调用第一步:在app/bootstrap下定义一个php文件 diy_helpers.php​内容如下: <?phpfunctioncssVersion($data){  $version="1.01";  return$data."?v=".$version;}functionjsVersion($data){  $ver......