Применяется onbeforeunload в теге body для выхода пользователя из системы, когда вкладка / браузер закрывается в приложении MVC.
Мне как-то удалось обойти перенаправление на другие ссылки, а также на F5, но когда я нажимаю кнопку обновления, этовыводит меня из системы, также, когда я выбираю URL в адресной строке и нажимаю клавишу ввода, он выводит меня из системы.
<body onbeforeunload="UserLogoutOnBrowserClose(event)">
<script>
var href;
var id;
var logout;
var descargar;
var isF5Pressed;
$('a').click(function () {
href = ($(this).attr('href'));
id = ($(this).attr('id'));
if (id === "logout")
logout = id;
else if (id === "descargar")
descargar = id;
});
$(document.body).on("keydown", this, function (event) {
if (event.keyCode == 116) {
isF5Pressed = true;
}
});
$(window).on("unload", this, function (event) {
console.log(window.performance);
});
function UserLogoutOnBrowserClose(e) {
debugger;
var navigation = e.currentTarget.performance.navigation.type;
var activeElement = document.activeElement;
var myWindow;
var Uri = '@Url.Action("LogOff", "Account",new { area="" })';
var bodyID = '@bodyId';
var attributes = document.activeElement.attributes;
var attributesId = (document.activeElement.attributes).id;
var baseURI = document.baseURI;
// submit-pse-button check is applied to prevent user from signing out while redirecting to PSE portal
if (attributesId.value === "submit-pse-button" || attributesId.value === "reclamarButton" || activeElement.localName === "a"
|| activeElement.localName === "button" || logout != undefined || descargar != undefined || isF5Pressed != undefined) { }
else {
if (attributes.href != undefined) {
if (bodyID === "customer" && baseURI == attributes.href.value)
myWindow = window.open(Uri, "");
}
else {
if (bodyID === "customer")
myWindow = window.open(Uri, "");
}
}
}
</script>
Как обойти все другие события, такие как отправка формы, нажатие тега привязки, нажатие кнопки ввода дает возможность получить этособытие сработало или, по крайней мере, может проверить, нажата ли / попала / отправлена какая-либо из вышеуказанных задач.