DEV Community

KAMAL KISHOR
KAMAL KISHOR

Posted on

๐Ÿ•ต๏ธโ€โ™‚๏ธ 50 Hidden Browser Events & APIs (with Code Examples)

Most developers stick to the usual suspects: click, input, keydown. But the browser hides a treasure chest of lesser-known events and APIs that give you superpowers for building advanced web apps.

In this post, Iโ€™ll show you 50 hidden gems, grouped by category, with examples and real-world use cases.

๐Ÿ”„ Page Lifecycle & Navigation

1. beforeunload

window.addEventListener("beforeunload", (e) => {
  e.preventDefault();
  e.returnValue = "";
  console.log("Page is closing or reloading");
});
Enter fullscreen mode Exit fullscreen mode

2. pagehide

window.addEventListener("pagehide", () => {
  console.log("Page hidden or unloaded");
});
Enter fullscreen mode Exit fullscreen mode

3. pageshow

window.addEventListener("pageshow", (e) => {
  console.log("Page shown again", e.persisted ? "From cache" : "Fresh load");
});
Enter fullscreen mode Exit fullscreen mode

4. visibilitychange

document.addEventListener("visibilitychange", () => {
  console.log("Visibility:", document.visibilityState);
});
Enter fullscreen mode Exit fullscreen mode

5. freeze / resume

document.addEventListener("freeze", () => console.log("Page frozen"));
document.addEventListener("resume", () => console.log("Page resumed"));
Enter fullscreen mode Exit fullscreen mode

6. popstate

window.addEventListener("popstate", (e) => {
  console.log("Navigated back/forward", e.state);
});
Enter fullscreen mode Exit fullscreen mode

7. hashchange

window.addEventListener("hashchange", () => {
  console.log("New hash:", location.hash);
});
Enter fullscreen mode Exit fullscreen mode

8. DOMContentLoaded

document.addEventListener("DOMContentLoaded", () => {
  console.log("DOM fully parsed");
});
Enter fullscreen mode Exit fullscreen mode

9. load

window.addEventListener("load", () => {
  console.log("All resources loaded");
});
Enter fullscreen mode Exit fullscreen mode

10. unhandledrejection

window.addEventListener("unhandledrejection", (e) => {
  console.error("Unhandled promise:", e.reason);
});
Enter fullscreen mode Exit fullscreen mode

๐Ÿ–ฅ๏ธ Window & Document Events

11. resize

window.addEventListener("resize", () => {
  console.log("Window size:", window.innerWidth, window.innerHeight);
});
Enter fullscreen mode Exit fullscreen mode

12. scrollend

document.addEventListener("scrollend", () => {
  console.log("Scrolling finished");
});
Enter fullscreen mode Exit fullscreen mode

13. fullscreenchange

document.addEventListener("fullscreenchange", () => {
  console.log("Fullscreen:", !!document.fullscreenElement);
});
Enter fullscreen mode Exit fullscreen mode

14. deviceorientation

window.addEventListener("deviceorientation", (e) => {
  console.log("Orientation:", e.alpha, e.beta, e.gamma);
});
Enter fullscreen mode Exit fullscreen mode

15. devicemotion

window.addEventListener("devicemotion", (e) => {
  console.log("Acceleration:", e.acceleration);
});
Enter fullscreen mode Exit fullscreen mode

16. orientationchange

window.addEventListener("orientationchange", () => {
  console.log("Orientation changed:", screen.orientation.type);
});
Enter fullscreen mode Exit fullscreen mode

17. storage

window.addEventListener("storage", (e) => {
  console.log("Storage change:", e.key, e.newValue);
});
Enter fullscreen mode Exit fullscreen mode

18. beforeprint / afterprint

window.addEventListener("beforeprint", () => console.log("Before print"));
window.addEventListener("afterprint", () => console.log("After print"));
Enter fullscreen mode Exit fullscreen mode

19. copy / cut / paste

document.addEventListener("copy", () => console.log("Copied!"));
document.addEventListener("paste", (e) => {
  console.log("Pasted:", e.clipboardData.getData("text"));
});
Enter fullscreen mode Exit fullscreen mode

20. selectionchange

document.addEventListener("selectionchange", () => {
  console.log("Selected text:", document.getSelection().toString());
});
Enter fullscreen mode Exit fullscreen mode

๐Ÿ–ฑ๏ธ Input/Pointer & UX

21. contextmenu

document.addEventListener("contextmenu", (e) => {
  e.preventDefault();
  console.log("Right-click blocked");
});
Enter fullscreen mode Exit fullscreen mode

22. auxclick

document.addEventListener("auxclick", (e) => {
  console.log("Aux click:", e.button);
});
Enter fullscreen mode Exit fullscreen mode

23. pointerlockchange

document.addEventListener("pointerlockchange", () => {
  console.log("Pointer lock:", document.pointerLockElement);
});
Enter fullscreen mode Exit fullscreen mode

24. pointerrawupdate

document.addEventListener("pointerrawupdate", (e) => {
  console.log("Raw move:", e.movementX, e.movementY);
});
Enter fullscreen mode Exit fullscreen mode

25. wheel

window.addEventListener("wheel", (e) => {
  console.log("Wheel delta:", e.deltaY);
});
Enter fullscreen mode Exit fullscreen mode

26. dblclick

document.addEventListener("dblclick", () => {
  console.log("Double clicked!");
});
Enter fullscreen mode Exit fullscreen mode

27. mouseenter / mouseleave

box.addEventListener("mouseenter", () => console.log("Mouse entered box"));
box.addEventListener("mouseleave", () => console.log("Mouse left box"));
Enter fullscreen mode Exit fullscreen mode

28. focusin / focusout

document.addEventListener("focusin", () => console.log("Focus in"));
document.addEventListener("focusout", () => console.log("Focus out"));
Enter fullscreen mode Exit fullscreen mode

29. dragstart / dragend / drop

box.addEventListener("dragstart", () => console.log("Dragging started"));
dropzone.addEventListener("drop", () => console.log("Dropped!"));
Enter fullscreen mode Exit fullscreen mode

30. input with inputType

document.querySelector("input").addEventListener("input", (e) => {
  console.log("Input type:", e.inputType, "Value:", e.target.value);
});
Enter fullscreen mode Exit fullscreen mode

๐Ÿ“ก Network & Connectivity

31. online / offline

window.addEventListener("online", () => console.log("Back online"));
window.addEventListener("offline", () => console.log("Offline mode"));
Enter fullscreen mode Exit fullscreen mode

32. Service Worker fetch

self.addEventListener("fetch", (e) => {
  console.log("Intercepted:", e.request.url);
});
Enter fullscreen mode Exit fullscreen mode

33. Service Worker push

self.addEventListener("push", (e) => {
  console.log("Push message:", e.data.text());
});
Enter fullscreen mode Exit fullscreen mode

34. beforeinstallprompt

window.addEventListener("beforeinstallprompt", (e) => {
  e.preventDefault();
  console.log("PWA install available");
});
Enter fullscreen mode Exit fullscreen mode

35. appinstalled

window.addEventListener("appinstalled", () => {
  console.log("PWA installed");
});
Enter fullscreen mode Exit fullscreen mode

36. connectionchange

navigator.connection.addEventListener("change", () => {
  console.log("Network:", navigator.connection.effectiveType);
});
Enter fullscreen mode Exit fullscreen mode

37. WebSocket onclose

socket.onclose = () => console.log("WebSocket closed");
Enter fullscreen mode Exit fullscreen mode

38. WebSocket onerror

socket.onerror = (e) => console.log("WebSocket error", e);
Enter fullscreen mode Exit fullscreen mode

39. Service Worker backgroundfetchsuccess

self.addEventListener("backgroundfetchsuccess", (e) => {
  console.log("Background fetch done", e.registration.id);
});
Enter fullscreen mode Exit fullscreen mode

40. navigator.sendBeacon

navigator.sendBeacon("/log", JSON.stringify({ event: "exit" }));
Enter fullscreen mode Exit fullscreen mode

๐ŸŽ™๏ธ Media & Device APIs

41. canplay

video.addEventListener("canplay", () => console.log("Media can play"));
Enter fullscreen mode Exit fullscreen mode

42. canplaythrough

video.addEventListener("canplaythrough", () => console.log("Buffer enough to play through"));
Enter fullscreen mode Exit fullscreen mode

43. ended

video.addEventListener("ended", () => console.log("Video ended"));
Enter fullscreen mode Exit fullscreen mode

44. timeupdate

video.addEventListener("timeupdate", () => console.log("Current time:", video.currentTime));
Enter fullscreen mode Exit fullscreen mode

45. waiting

video.addEventListener("waiting", () => console.log("Buffering..."));
Enter fullscreen mode Exit fullscreen mode

46. speechstart / speechend

recognition.addEventListener("speechstart", () => console.log("Speech started"));
recognition.addEventListener("speechend", () => console.log("Speech ended"));
Enter fullscreen mode Exit fullscreen mode

47. voiceschanged

speechSynthesis.onvoiceschanged = () => {
  console.log("Voices available:", speechSynthesis.getVoices());
};
Enter fullscreen mode Exit fullscreen mode

48. gamepadconnected

window.addEventListener("gamepadconnected", (e) => {
  console.log("Gamepad:", e.gamepad.id);
});
Enter fullscreen mode Exit fullscreen mode

49. gamepaddisconnected

window.addEventListener("gamepaddisconnected", (e) => {
  console.log("Gamepad removed:", e.gamepad.id);
});
Enter fullscreen mode Exit fullscreen mode

50. bluetoothavailabilitychanged

navigator.bluetooth.addEventListener("availabilitychanged", (e) => {
  console.log("Bluetooth available:", e.value);
});
Enter fullscreen mode Exit fullscreen mode

๐ŸŽฏ Wrapping Up

Most devs never use these โ€” but mastering hidden events & APIs lets you:

Build offline-ready PWAs

Handle back/forward cache properly

Capture system/device events (gamepad, Bluetooth, sensors)

Improve UX with clipboard, printing, fullscreen, orientation

๐Ÿ‘‰ Bookmark this as your cheat sheet of browser superpowers.

๐ŸŽฎ Try It Live!

๐Ÿ‘‰ See the Pen 50 Hidden Gems JS

by Kamal Kishor (@koolkamalkishor) on CodePen.

Top comments (0)