是否可以在关闭的窗口中删除本地存储项?

时间:2018-08-16 13:27:25

标签: javascript jquery session-cookies

我将UTM参数存储在初次登陆用户的网站上。他/她可以访问网站的任何页面,并且在注册期间,我正在将这些参数发送到后端(存储到数据库)。

$(document).ready(function() {
    if(window.location.href.match('utm_*')) {
        var utmData =  {
        utm_source: getParameterByName('utm_source'),
        utm_medium: getParameterByName('utm_medium'),
        utm_campaign: getParameterByName('utm_campaign'),
        gclid: getParameterByName('gclid')
        }
        if(!localStorage.getItem('utmData')) {
            localStorage.setItem('utmData', JSON.stringify(utmData));
        }else if(localStorage.getItem('utmData')){
            localStorage.removeItem('utmData');
            localStorage.setItem('utmData', JSON.stringify(utmData));
        }                           
    }
});

但是问题是当用户未注册但这些参数仍然存在时。当他/她关闭浏览器时,我要删除。

2 个答案:

答案 0 :(得分:3)

使用window.onbeforeunload处理程序。

window.onbeforeunload = function(e) {
  localStorage.removeItem('utmData');
  // return nothing for no «quit confirmation»
};

答案 1 :(得分:2)

如果您不想保留项目,可以将数据保存在SessionStorage中:

$(document).ready(function() {
    if(window.location.href.match('utm_*')) {
        var utmData =  {
        utm_source: getParameterByName('utm_source'),
        utm_medium: getParameterByName('utm_medium'),
        utm_campaign: getParameterByName('utm_campaign'),
        gclid: getParameterByName('gclid')
        }
        if(!sessionStorage.getItem('utmData')) {
            sessionStorage.setItem('utmData', JSON.stringify(utmData));
        }else if(SessionStorage.getItem('utmData')){
            sessionStorage.removeItem('utmData');
            sessionStorage.setItem('utmData', JSON.stringify(utmData));
        }                           
    }
});