在选项卡/浏览器关闭而不是重新加载时调用 javascript 函数
Call a javascript function on tab /browser close not on reload
我有一个问题。我正在尝试清除选项卡关闭时的 cookie 值。我已经创建了一个函数,但它也会清除页面重新加载的值.我也尝试了这个解决方案堆栈溢出问题
function getCookie(name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2) return parts.pop().split(";").shift();
}
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toUTCString();
document.cookie = cname + "=" + cvalue + "; " + expires+"; path=/";
}
function unloadPage()
{
var check=getCookie('mycookie')
if(check)
setCookie('mycookie','','-2');
}
$(document).ready(function() {
window.onbeforeunload = unloadPage;
});
功能正在工作,但问题是它也在页面重新加载时清除cookie。 但我只想在用户关闭窗口时清除cookie。
谢谢。
我已经尝试了多种解决方案,例如" unload
","onbeforeunload
","performance.getEntriesByType("navigation")[0]
",但没有任何效果。
我正在多页 Web 应用程序上尝试它。下面提到了有效的方法:我需要在关闭选项卡/浏览器上调用注销功能而不是重新加载。在要注销的页面上,设置本地存储变量。
localStorage.setItem('isReloaded', true);
现在,在您的主页上
componentDidMount(){
if(localStorage.getItem('isReloaded') != null){
this.logout(); //logout function
}
并且,内部注销功能重置本地存储值
logout(){
//your logout code
localStorage.removeItem('isReloaded')
}
在 react 应用程序及其对我的工作上完成了此操作在索引上.html文件将其写入脚本标记中
<script type="text/javascript">
window.addEventListener("beforeunload", (event) => {
window.localStorage.isMySessionActive = "true";
});
window.onunload = function (e) {
const newTabCount = localStorage.getItem("tabsOpen");
if (newTabCount !== null) {
localStorage.setItem("tabsOpen", newTabCount - 1);
}
};
</script>
然后继续主文件并编写此代码
useEffect(() => {
// define increment counter part
const tabsOpen = localStorage.getItem("tabsOpen");
if (tabsOpen == null) {
localStorage.setItem("tabsOpen", 1);
} else {
localStorage.setItem("tabsOpen", parseInt(tabsOpen) + parseInt(1));
}
// define decrement counter part
window.onunload = function (e) {
const newTabCount = localStorage.getItem("tabsOpen");
if (newTabCount !== null) {
localStorage.setItem("tabsOpen", newTabCount - 1);
}
};
if (performance.navigation.type == performance.navigation.TYPE_RELOAD) {
window.localStorage.isMySessionActive = "false";
} else {
const newTabCount2 = localStorage.getItem("tabsOpen");
let value = localStorage.getItem("isMySessionActive");
if (value == "true") {
if (newTabCount2 - 1 == 0) {
localStorage.clear();
window.localStorage.isMySessionActive = "false";
} else {
window.localStorage.isMySessionActive = "false";
}
}
}
}, []);
相关文章:
- 在新的浏览器选项卡上加载新的aspx页面后调用JavaScript函数
- 更改css链接并等待加载新的css
- 如何在Ajax加载新内容时停止JavaScript执行
- 当在ng视图中加载新路由时,Tabbing(tabindex)针对错误的元素
- 如何使用输入数据加载新的extjs图表
- JQuery Masonry.Ajax图标和“;加载新项目”;绳子放错地方了
- 通过javascript在同一个打开的选项卡中重新加载新的网页内容
- 当用户到达页面右侧时加载新内容
- 数据表 AJAX 筛选器重新加载数据
- 超链接单击以加载新页面并执行JavaScript
- 单击时加载新的 SVG
- 在RadWindow中加载新页面,然后从加载的窗体中关闭窗口
- ajax在页面刷新之前不会加载新的sql结果
- 谷歌地图API-在从ajax页面加载新数据之前清除标记、多段线
- 使用Ajax加载页面,并在必要时加载新脚本
- 加载新页面时的过渡效果,AJAX
- Ajax没有正确加载新页面
- 正在加载新的Javascript,但正在调用旧的Javascript.MVC
- 咕噜咕噜的手表:实时加载重新加载落后 1 步....
- 我怎么能有一个花哨的盒子一样的弹出体加载,但与cookie不连续加载重新加载