diff --git a/assets/js/page_image_detail.js b/assets/js/page_image_detail.js
index 42d8b07e959eea4eaac9940334fe220e446566e1..42224a94c8612312edf83135ed3c26677ff1d2ad 100644
--- a/assets/js/page_image_detail.js
+++ b/assets/js/page_image_detail.js
@@ -19,13 +19,19 @@ const save = document.querySelector("#save");
 const updateForm = document.querySelector(".update-form");
 
 let lastTimeOut = null;
+let lastSaved = null;
 
-const doSave = () => {
+const currentState = () => {
     const data = new FormData(document.forms.namedItem("upload"));
     data.append("from_js", "true");
+};
+
+const doSave = () => {
+    const data = currentState();
     save.value = "Saving…";
     postData(location.href, data).then((json) => {
         save.value = "Saved";
+        lastSaved = data;
     })
 };
 
@@ -71,4 +77,11 @@ save.addEventListener("click", (e) => {
     e.preventDefault();
 
     doSave();
-});
\ No newline at end of file
+});
+
+window.onbeforeunload = (e) => {
+    const state = currentState();
+    if (lastSaved !== null && lastSaved !== state) {
+        return "Your changes have not been saved. Are you sure you want to leave?"
+    }
+};
\ No newline at end of file