Elementor中window.location.replace失效,无法禁用浏览器返回按钮
家暴救助网站紧急退出按钮解决方案
问题原因
你当前的代码同时调用了window.open(打开新标签)和window.location.replace(替换当前页面),浏览器会优先处理新标签打开操作,导致当前页面的replace未按预期覆盖历史记录;另外,即使replace生效,用户若切换回原标签仍能操作返回按钮。需要调整逻辑来实现“禁用返回”的效果(注:无法完全禁用浏览器返回键,但可以通过修改历史栈让返回按钮失效)。
解决方案
方案1:仅替换当前页面(推荐)
去掉window.open,直接用window.location.replace替换当前页面,这样原家暴网站的页面会从浏览器历史栈中被覆盖,用户点击返回会回到进入家暴网站之前的页面,而非家暴网站内部页面。
代码示例:
jQuery("#Exit").on("click", function(){ window.location.replace("https://www.google.com"); });
注意:Elementor中jQuery可能处于noConflict模式,所以用
jQuery而非$,避免报错。
方案2:保留新标签+强化历史栈处理
如果必须打开新标签,同时通过修改历史栈和监听返回事件,防止用户回到家暴网站页面:
jQuery("#Exit").on("click", function(){ // 打开目标新标签 window.open("https://www.google.com/search?q=cute+cat", "_blank"); // 替换当前页面历史记录 window.location.replace("https://www.google.com"); // 覆盖当前历史栈条目,防止返回 history.replaceState(null, null, window.location.href); // 监听浏览器返回事件,触发时再次跳转 window.addEventListener('popstate', function() { history.replaceState(null, null, window.location.href); window.location.replace("https://www.google.com"); }); });
额外建议
- 紧急退出按钮建议添加键盘快捷键(如ESC键),提升隐蔽性和易用性:
document.addEventListener('keydown', function(e) { if (e.key === 'Escape') { window.location.replace("https://www.google.com"); } }); - 确保按钮样式隐蔽(比如透明或和页面背景融合),避免被施暴者发现。
内容的提问来源于stack exchange,提问作者tryinHada
相关产品推荐
相关产品推荐

