using Microsoft.JSInterop;
namespace Front.Program.Services;
public class NavigationService
{
private readonly IJSRuntime _jsRuntime;
public NavigationService(IJSRuntime jsRuntime)
{
_jsRuntime = jsRuntime;
}
///
/// 뒤로가기를 완전히 막습니다
///
public async Task PreventBackNavigationAsync()
{
await _jsRuntime.InvokeVoidAsync("eval", @"
history.pushState(null, null, location.href);
window.addEventListener('popstate', function(event) {
history.pushState(null, null, location.href);
});
");
}
///
/// 확인 대화상자와 함께 뒤로가기를 막습니다
///
public async Task PreventBackNavigationWithConfirmAsync(string message = "정말로 페이지를 떠나시겠습니까?")
{
await _jsRuntime.InvokeVoidAsync("eval", $@"
history.pushState(null, null, location.href);
window.addEventListener('popstate', function(event) {{
if (confirm('{message}')) {{
history.back();
}} else {{
history.pushState(null, null, location.href);
}}
}});
");
}
///
/// 뒤로가기 방지를 해제합니다
///
public async Task AllowBackNavigationAsync()
{
await _jsRuntime.InvokeVoidAsync("eval", @"
window.removeEventListener('popstate', arguments.callee);
");
}
}