上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

如何劫持网页中的esc功能

[复制链接]
  • TA的每日心情
    奋斗
    2023-11-15 15:32
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    2

    主题

    2

    回帖

    9

    积分

    助理工程师

    积分
    9
    发表于 2023-11-10 15:57:51 | 显示全部楼层 | 阅读模式
    悬赏10油猫币未解决

    各位大佬好,我在研究一个react网页中的esc,这个网页的输入框在按下esc后自动关闭,所以导致输入法打错字按下esc后会直接关闭输入框然后丢失文本。我希望的是劫持esc功能,而不是更改文本框的消失功能。
    我用添加了如下的脚本,希望劫持住esc的事件

    window.addEventListener("keydown",function(event){
      if(event.key=='escape'){
        console.log('this is esc')
        event.stopImmediatePropagation()
        event.stopPropagation()
        event.preventDefault()
        console.log('应该被取消了')
      }
    })
    
    document.addEventListener("keydown",function(event){
      if(event.key=='escape'){
        console.log('this is esc')
        event.stopImmediatePropagation()
        event.stopPropagation()
        event.preventDefault()
        console.log('应该被取消了')
      }
    })
    

    但是没有用,这个keydown还是在继续传播
    微信截图_20231110154410.png
    图中的这一段代码是在react的里面,是个window.addEventListener
    但是我把网页中的所有keydown、keyup、keypress事件都删除后,还是可以用esc取消文本框。
    更绝的是我把除了必要的click之外的事件全删除了,它还是可以用esc取消文本框。
    微信截图_20231110155504.png

  • TA的每日心情
    慵懒
    13 小时前
  • 签到天数: 813 天

    [LV.10]以坛为家III

    31

    主题

    552

    回帖

    1556

    积分

    荣誉开发者

    积分
    1556

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2023-11-10 16:42:55 | 显示全部楼层

    代码应该没啥问题,可能是条件写错了
    event.key=='escape' 改成 event.key=='Escape'
    image.png

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-11-15 15:32
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    2

    主题

    2

    回帖

    9

    积分

    助理工程师

    积分
    9
    发表于 2023-11-10 17:25:28 | 显示全部楼层

    本帖最后由 leshui 于 2023-11-10 17:27 编辑

    代码应该没啥问题,可能是条件写错了
    event.key=='escape' 改成 event.key=='Escape'
    ![image.png] ...[/quote]
    我改了大写的Escape,还是不行,最奇怪的是我把网页里所有的listener都删除之后,还是可以关闭文本/p>

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-11-15 15:32
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    2

    主题

    2

    回帖

    9

    积分

    助理工程师

    积分
    9
    发表于 2023-11-10 17:29:51 | 显示全部楼层
    steven026 发表于 2023-11-10 16:42
    [md]代码应该没啥问题,可能是条件写错了
    `event.key=='escape'` 改成 `event.key=='Escape'`
    ![image.png] ...

    我在想
    1、是不是react自己实现了一个event的传播途径,listener不管用。
    2、这个网页使用了什么标记,定时轮询这个标记在不在来实现关闭网页。
    这个网页还是算是大厂的,应该不是2那个那么扯的方式。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    13 小时前
  • 签到天数: 813 天

    [LV.10]以坛为家III

    31

    主题

    552

    回帖

    1556

    积分

    荣誉开发者

    积分
    1556

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2023-11-10 18:46:36 | 显示全部楼层
    leshui 发表于 2023-11-10 17:29
    我在想
    1、是不是react自己实现了一个event的传播途径,listener不管用。
    2、这个网页使用了什么标记,定 ...

    有可能是事件监听注册在具体元素上而不是全局
    这种只能发网址具体调试了,可能性太多了
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-11-10 22:34:58 | 显示全部楼层
    阻断事件传播必须将addEventListener的第三个参数设置为true,以使其在捕获阶段阻断,默认的冒泡阶段事件已经传播完了:
    https://developer.mozilla.org/zh ... et/addEventListener
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表