diff --git a/lib/worker.js b/lib/worker.js
index 7d3e1ad330..0011110538 100644
--- a/lib/worker.js
+++ b/lib/worker.js
@@ -44,25 +44,28 @@ const operationCountLimit = parseInt(query.operationCountLimit, 10);
 const averageTracker = new AverageTracker({limit: operationCountLimit});
 const childPidsById = new Map();
 
+const cleanUp = () => {
+  managerWebContents.removeListener('crashed', destroyRenderer);
+  managerWebContents.removeListener('destroyed', destroyRenderer);
+  window.removeEventListener('beforeunload', cleanUp)
+};
+
 const destroyRenderer = () => {
   if (!managerWebContents.isDestroyed()) {
-    managerWebContents.removeListener('crashed', destroyRenderer);
-    managerWebContents.removeListener('destroyed', destroyRenderer);
+    cleanUp()
   }
   const win = remote.BrowserWindow.fromWebContents(remote.getCurrentWebContents());
   if (win && !win.isDestroyed()) {
     win.destroy();
   }
 };
+
 const managerWebContentsId = parseInt(query.managerWebContentsId, 10);
 const managerWebContents = remote.webContents.fromId(managerWebContentsId);
 if (managerWebContents && !managerWebContents.isDestroyed()) {
   managerWebContents.on('crashed', destroyRenderer);
   managerWebContents.on('destroyed', destroyRenderer);
-  window.onbeforeunload = () => {
-    managerWebContents.removeListener('crashed', destroyRenderer);
-    managerWebContents.removeListener('destroyed', destroyRenderer);
-  };
+  window.addEventListener('beforeunload', cleanup);
 }
 
 const channelName = query.channelName;