静态网站订阅弹窗每次刷新都弹出,如何实现用户操作后永久不展示?
问题原因
- 你当前设置的Cookie未指定过期时间,属于会话Cookie,仅在当前浏览器进程生效,关闭浏览器后会自动被清除,这是你重启浏览器后弹窗再次出现的核心原因。
- Cookie触发逻辑不合理:当前绑定的是
.close元素的mouseenter(鼠标移入)事件,不仅用户点击Subscribe、Not Now按钮时不会触发Cookie设置,甚至鼠标不小心滑过关闭按钮就会误触发Cookie写入,不符合需求。
修改方案
你可以直接替换为以下代码,我已经做了逻辑修正:
$(document).ready(function () { // 先判断用户是否已经关闭过弹窗 if (!$.cookie("dismiss")) { $('.modal').appendTo("body"); function show_modal() { $('.modal').modal(); } window.setTimeout(show_modal, 300); } // 封装永久禁用弹窗的Cookie设置函数,过期时间设为10年等效永久生效 function setDismissCookie() { // 原生Cookie写法,兼容所有环境 document.cookie = "dismiss=true; max-age=315360000; path=/"; // 如果你用了jQuery.cookie插件,也可以用下方写法替换上面的原生写法,二选一即可 // $.cookie('dismiss', 'true', { expires: 3650, path: '/' }); } // 给所有触发弹窗关闭的元素绑定点击事件,点击后永久禁用弹窗 // 注意:下面的.not-now-btn、.subscribe-btn需要替换为你页面上对应按钮实际的类名/ID选择器 $(".close, .not-now-btn, .subscribe-btn").click(function() { setDismissCookie(); // 如果你的按钮点击后已经自带关闭弹窗逻辑,可以删掉下面这行 $('.modal').modal('hide'); }); });
补充说明
配置里的path=/是保证Cookie在全站所有页面都生效,避免出现只有弹窗出现的页面才能读取到Cookie的问题。
内容的提问来源于stack exchange,提问作者Shoyeb Mohammed Suny
相关产品推荐
相关产品推荐

