Prevent accidentally leaving new-post page
The below script will prevent you from leaving a blog post that you're in the midst of editing. It allows exit if you publish, save as draft, or Delete.
See my other Bearblog Tips & Tools
Visit https://bearblog.dev/dashboard/customise/ and paste the below code into the 'Dashboard footer content'.
<!-- Prevent accidentally leaving 'New Post' and 'Edit Post' page. -->
<script type="text/javascript">
window.addEventListener('beforeunload',
function(event) {
const url = window.location.href;
const body_content = document.getElementById("body_content");
// Make sure we're on the NEW POST / EDIT POST page.
if (!url.includes('/dashboard/posts/')
||body_content == null) {
//console.log("url not match or body_content null");
return null;
}
const target = event.originalTarget.activeElement;
// If you're submitting or deleting, we allow page exit
if (target.getAttribute('type') == 'submit'
|| target.innerText == 'Delete') {
//console.log("is a submission or deletion");
return null;
}
//console.log("confirm exit");
// it's a new/edit post (or page), so let's confirm you want to leave
const msg = "Are you sure you want to leave this page?";
// the .returnValue approach "is consistent across modern versions of Firefox, Safari, and Chrome." according to mdn, but I leave the return msg as a fallback for niche browsers in case they do it wrong.
(event || window.event).returnValue = msg;
return msg;
}
);
</script>
This is the 3rd iteration. Version 2. Version 1.
Note: It seems, at least in Firefox, if you load the page then try to leave without changing anything, then the exit-prevention doesn't work. Idunno why, I'm guessing onbeforeunload doesn't get called? It doesn't matter, since you don't lose any work.