瀏覽代碼

[RFC] show confirmation dialog before the user closes the page (#957)

Keyan Zhang 5 年之前
父節點
當前提交
d58216f5ec
共有 1 個文件被更改,包括 14 次插入0 次删除
  1. 14 0
      src/components/App.tsx

+ 14 - 0
src/components/App.tsx

@@ -522,6 +522,8 @@ export class App extends React.Component<any, AppState> {
     }
     const scene = await loadScene(null);
     this.syncActionResult(scene);
+
+    window.addEventListener("beforeunload", this.beforeUnload);
   }
 
   public componentWillUnmount() {
@@ -554,6 +556,7 @@ export class App extends React.Component<any, AppState> {
       false,
     );
     document.removeEventListener("gestureend", this.onGestureEnd as any, false);
+    window.removeEventListener("beforeunload", this.beforeUnload);
   }
 
   public state: AppState = getDefaultAppState();
@@ -2180,6 +2183,17 @@ export class App extends React.Component<any, AppState> {
     }));
   };
 
+  private beforeUnload = (event: BeforeUnloadEvent) => {
+    if (
+      this.state.isCollaborating &&
+      hasNonDeletedElements(globalSceneState.getAllElements())
+    ) {
+      event.preventDefault();
+      // NOTE: modern browsers no longer allow showing a custom message here
+      event.returnValue = "";
+    }
+  };
+
   private addElementsFromPaste = (
     clipboardElements: readonly ExcalidrawElement[],
   ) => {