网站右键禁用后,鼠标滚轮点击弹出提示仍打开新标签页的解决求助
解决右键禁用后鼠标中键仍打开链接的问题
嘿,我懂你的困扰——好不容易把右键禁用了,结果鼠标滚轮中键一点,弹完提示还是会在新标签页打开链接,确实闹心。问题出在你原来的代码只处理了右键的拦截逻辑,完全没管中键的默认行为,所以哪怕弹了提示,浏览器还是会执行中键打开链接的动作。
下面给你一套完整的解决方案,既能拦右键,也能把中键的行为彻底禁掉:
改进后的JavaScript代码
// 统一禁用右键和中键功能 // 处理现代浏览器的右键菜单事件 document.addEventListener('contextmenu', function(e) { e.preventDefault(); // 阻止默认右键菜单弹出 e.stopPropagation(); // 阻止事件冒泡 alert("Right click is disabled for Security Reasons."); return false; }); // 拦截鼠标按下事件,处理右键和中键 document.addEventListener('mousedown', function(e) { // button值:1对应中键,2对应右键 if (e.button === 1 || e.button === 2) { e.preventDefault(); // 阻止默认行为(比如中键打开新标签) e.stopPropagation(); alert("Right click and middle click are disabled for Security Reasons."); return false; } }); // 补充鼠标松开事件的拦截,防止漏网之鱼 document.addEventListener('mouseup', function(e) { if (e.button === 1 || e.button === 2) { e.preventDefault(); e.stopPropagation(); return false; } }); // 兼容旧版IE浏览器(如果需要支持的话) if (document.all) { document.onmousedown = function() { // 旧IE中button值判断逻辑略有差异,同时拦截中键和右键 if (window.event.button === 1 || window.event.button === 2) { window.event.returnValue = false; alert("Right click and middle click are disabled for Security Reasons."); return false; } }; document.oncontextmenu = function() { window.event.returnValue = false; alert("Right click is disabled for Security Reasons."); return false; }; }
关键逻辑说明
contextmenu事件:专门针对右键菜单,阻止它就能直接禁用右键弹出菜单的行为。mousedown/mouseup事件:拦截中键(button === 1)和右键(button === 2)的点击动作,通过preventDefault()直接阻止浏览器的默认行为(比如中键打开新标签)。- 事件冒泡阻止:用
stopPropagation()避免事件传递到父元素,防止出现意外的触发情况。 - 旧IE兼容:如果你的网站还需要支持老版本IE,保留最后那段针对
document.all的判断逻辑即可。
不过要提一句,这种禁用方式只能拦住普通用户,懂技术的人可以通过禁用JavaScript轻松绕过,但对于常规场景来说已经足够啦。
内容的提问来源于stack exchange,提问作者lifeisbeautiful
相关产品推荐
相关产品推荐

