javascript - js为什么不能阻止ctrl w关闭事件?

 手机用户2502856895 发布于 2022-11-11 10:20

在 window 上监听keypress事件
当触发keydown事件时,判断ctrlKey是否为true,keyCode是否为87(w
如果是,阻止默认事件。
但是似乎并不能阻止窗口关闭事件

        //测试屏蔽ctrl+w 
        $(window).on('keydown',function(event){
            if(event.ctrlKey&&event.keyCode==87){
                event.preventDefault();
                event.returnValue = false;
                alert("已阻止关闭事件");
                return false;
            }
            if(event.ctrlKey&&event.keyCode==65){
                event.preventDefault();
                alert("已阻止关闭事件");
                return false;
            }
        });

下面那一段是测试其他组合键是不是能用
经过测试发现ctrl+a可以拦截,但是ctrl+w并不能拦截
通过打断点的方式发现,如果按了ctrl+w,似乎浏览器并没有触发keydown事件就直接关闭了页面
请问有什么解决方法么?

navigator.userAgent:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36"

==============================
刚刚去测试了一下
ctrl + w在chrome浏览器中,不会触发任何监听事件
如果说为了安全或者为了用户主观意愿,在按下ctrl + w 以后一定要关闭当前标签页
为什么不做成,事件依旧触发,但是强制执行关闭命令。
类似于 onbeforeunload

6 个回答
  • 优先级的问题,浏览器也会监听键盘上事件的,浏览器监听完毕才轮到js监听,感觉有点像事件捕获。

    2022-11-12 01:49 回答
  • 如果这样可以阻止浏览器关闭窗口,那意味着js可以调用你的操作系统,那每一张网页都有可能让你电脑死掉。
    如果你不想让页面关闭,那就做提示吧,用onbeforeunload

    2022-11-12 01:49 回答
  • 键盘事件不只是有你的Javascript在浏览器中注册的事件处理程序, 系统的你是阻止不了的. Javascript 在浏览器中运行, 你只能控制浏览器给你的东西. 浏览器外的东西你就控制不了了, 除非你自己去Hack浏览器.

    2022-11-12 01:49 回答
  • 直白一点讲吧 windows上事件是消息机制的,按下ctrl + A 或者 ctrl + W 的时候触发系统中断,系统接收到按键判断是何类型,并层层传递给当前打开的窗口,此种情况下是浏览器,浏览器接收到消息,判断当前tab是哪个,并把这个消息传递给当前tab,当前的tab线程再一步处理按键类型,ctrl+A是全选,所以线程会传递一个全选的消息往js引擎,渲染引擎等,但是ctrl+W是关闭,tab页无需再往下传递按键消息,直接关闭当前tab

    其中有很多不对的地方,但是可以按照这个说法帮助理解

    2022-11-12 01:49 回答
  • 你的浏览器只是一个软件,它得到的东西都是操作系统给的,ctrl+w关闭浏览器tab页是操作系统的指令或者是当前页面上层软件的指令,意思就是关闭一个tab页,你当前在阻止的只是当前tab页的ctrl+w事件,怎么可能阻止上级指令的执行。

    2022-11-12 01:49 回答
  • 一开始搜没搜到才提问的
    后来又去搜了一遍
    只找到这些issue
    https://bugs.chromium.org/p/c...
    https://bugs.chromium.org/p/c...
    https://bugzilla.mozilla.org/...
    浏览器不允许监听
    ctrl + s,ctrl + w,ctrl + n,ctrl + t
    事件。
    但是我没找到官方回复。
    感觉这种设定很不方便啊。

    2022-11-12 01:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有