Page Visibility API
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015ë 7ì.
Page Visibility APIë 문ìê° ì¸ì íìëê±°ë ì¨ê²¨ì§ëì§ ì ì ìë ì´ë²¤í¸ì íì´ì§ê° íì¬ ë³´ì´ê³ ìëì§ ìí를 ì´í´ë³¼ ì ìë 기ë¥ì ì ê³µí©ëë¤.
ì´ ê¸°ë¥ì 문ìê° ë³´ì´ì§ ìì ë ë¶íìí ìì ì ìííì§ ìëë¡ íì¬ ë¦¬ìì¤ë¥¼ ì ì½íê³ ì±ë¥ì ê°ì íë ë° í¹í ì ì©í©ëë¤.
ê°ë ë° ì¬ì©ë²
ì¬ì©ìê° ì°½ì ìµìííê±°ë ë¤ë¥¸ íì¼ë¡ ì ííë©´, APIë visibilitychange ì´ë²¤í¸ë¥¼ ì ì¡íì¬ ë¦¬ì¤ëìê² íì´ì§ ìíê° ë³ê²½ëììì ì립ëë¤. ì´ë²¤í¸ë¥¼ ê°ì§íì¬ ì¼ë¶ ìì
ì ìííê±°ë ë¤ë¥´ê² ëìíëë¡ í ì ììµëë¤. ì를 ë¤ì´ ì¹ ì±ìì ëììì ì¬ì ì¤ì¸ ê²½ì° ì¬ì©ìê° íì 백그ë¼ì´ëë¡ ì´ëíë©´ ëììì ì¼ì ì¤ì§íê³ ì¬ì©ìê° íì¼ë¡ ëìì¤ë©´ ì¬ìì ë¤ì ììí ì ììµëë¤. ì¬ì©ìë ëìììì 기존 ì¬ì ì¤ì¸ ìì¹ë¥¼ ìì§ ìê³ , ëììì ì¤ëì¤ê° ì íì±í íì ì¤ëì¤ë¥¼ ë°©í´íì§ ìì¼ë©°, ê·¸ëì ì¬ì©ìê° ëììì ëì¹ì§ ìì ì ììµëë¤.
<iframe>ì ê°ìì± ìíë ìì 문ìì ëì¼í©ëë¤. CSS ìì±(ì:display: none;)ì ì¬ì©íë©´ <iframe>ì ì¨ê²¨ë ê°ìì± ì´ë²¤í¸ê° ë°ìíê±°ë íë ìì í¬í¨ë 문ìì ìíê° ë³ê²½ëì§ ììµëë¤.
ì¬ì© ì¬ë¡
Page Visibility APIì ëª ê°ì§ ì¬ì© ì¬ë¡ë¥¼ ì´í´ë³´ê² ìµëë¤.
- ì¬ì©ìê° íì´ì§ë¥¼ ë³´ê³ ìì§ ìì í ë¤ì ì¬ë¼ì´ëë¡ ëì´ê°ì§ ììì¼ íë ì´ë¯¸ì§ ìºë¬ì ì´ ìë ì¬ì´í¸
- í¹ì ì ë³´ì ëí ëìë³´ë를 íìíë ì í리ì¼ì´ì ì´ íì´ì§ê° íìëì§ ìì ë ìë²ì ì ë°ì´í¸ë¥¼ ìì²íê³ ì¶ì§ ìì ì¬ì´í¸
- íì´ì§ê° 미리 ë ëë§ ëë ì기를 ê°ì§íì¬ ì íí íì´ì§ ì¡°í ì를 ì ì§íë ¤ë ì¬ì´í¸
- ëë°ì´ì¤ê° ë기 ìí(ì¬ì©ìê° ì ì ë²í¼ì ëë¬ íë©´ì ëë ê²½ì°)ì ìì ë ì리를 ëê³ ì¶ì´ íë ì¬ì´í¸
ê°ë°ìë ì§ê¸ê¹ì§ ì´ë¥¼ ê°ì§í기 ìí´ ë¶ìì í íë¡ì를 ì¬ì©í´ ììµëë¤. ì를 ë¤ì´ ì°½ìì blur ë° focus ì´ë²¤í¸ë¥¼ ê°ìíë©´ íì´ì§ê° íì± íì´ì§ê° ìë ê²½ì°ë¥¼ íì
íë ë°ë ëìì´ ëì§ë§, íì´ì§ê° ì¤ì ë¡ ì¬ì©ììê² ì¨ê²¨ì ¸ ìë¤ë ê²ì ìë ¤ì£¼ì§ë ììµëë¤. Page Visibility APIë ì´ ë¬¸ì 를 í´ê²°í©ëë¤.
백그ë¼ì´ë íì´ì§ ì±ë¥ì ì§ìíë ì ì±
Page Visibility APIìë ë³ëë¡ ì¬ì©ì ìì´ì í¸ë ì¼ë°ì ì¼ë¡ 백그ë¼ì´ë ëë ì¨ê²¨ì§ íì ì±ë¥ ìí¥ì ìíí기 ìí´ ì¬ë¬ ê°ì§ ì ì± ì ë§ë ¨íê³ ììµëë¤. ì¬ê¸°ìë ë¤ìì´ í¬í¨ë ì ììµëë¤.
- ëë¶ë¶ì ë¸ë¼ì°ì ë ì±ë¥ê³¼ ë°°í°ë¦¬ ìëª
ì ê°ì í기 ìí´ ë°±ê·¸ë¼ì´ë íì´ë ì¨ê²¨ì§
<iframe>ìrequestAnimationFrame()ì½ë°± ì ì¡ì ì¤ì§í©ëë¤. - 백그ë¼ì´ë/ë¹íì± íììë
setTimeout()ê³¼ ê°ì íì´ë¨¸ê° ì¤ë¡íë§ ëì´ ì±ë¥ ê°ì ì ëìì´ ë©ëë¤. ìì¸í ë´ì©ì setTimeoutì´ ì§ì ë ìê°ë³´ë¤ ë ì¤ë ì§ì°ëë ì´ì 를 참조íì¸ì. - ë¸ë¼ì°ì ë ìì° ê¸°ë° ë°±ê·¸ë¼ì´ë ìê°ì í ì¤ë¡íë§ì 구íí©ëë¤. ì´ë ìµì ë¸ë¼ì°ì ìì ë¹ì·í ë°©ìì¼ë¡ ìëíë©° ìì¸í ë´ì©ì ë¤ìê³¼ ê°ìµëë¤.
- Firefoxìì 백그ë¼ì´ë íì ì°½ìë ê°ê° ë°ë¦¬ì´ ë¨ìì ê³ ì í ìê° ìì°ì´ ìì¼ë©°, ìµëê°ê³¼ ìµìê°ì ê°ê° +50 msì -150 msì ëë¤. Chromeë ìì°ì´ ì´ ë¨ìë¡ ì§ì ëë¤ë ì ì ì ì¸íë©´ ë§¤ì° ì ì¬í©ëë¤.
- Windowsë ì°½ íì´ë¨¸ì ì§ì ë ê²ê³¼ ëì¼í ì¤ë¡íë§ ì§ì° ê·ì¹ì ë°ë¼ 30ì´ íì ì¤ë¡íë§ì´ ì ì©ë©ëë¤. (ë¤ì setTimeoutì´ ì§ì ë ìê°ë³´ë¤ ë ì¤ë ì§ì°ëë ì´ì 를 참조íì¸ì) Chromeììë ì´ ê°ì´ 10ì´ì ëë¤.
- íì´ë¨¸ ìì ì ìì°ì´ ììê° ìë ê²½ì°ìë§ íì©ë©ëë¤.
- íì´ë¨¸ì ì½ë ì¤íì´ ìë£ëë©´, ì¤íì 걸린 ìê°ì´ í´ë¹ ì°½ì ìê° ì´ê³¼ ìì°ìì ì°¨ê°ë©ëë¤.
- ìì°ì Firefoxì Chrome 모ëìì ì´ë¹ 10msì ìëë¡ ì¬ìì±ë©ëë¤.
ì¼ë¶ íë¡ì¸ì¤ë ì´ ì¤ë¡íë§ ëììì ì ì¸ë©ëë¤. ì´ë¬í ê²½ì° Page Visibility API를 ì¬ì©íì¬ íì´ ì¨ê²¨ì ¸ ìë ëì íì ì±ë¥ ìí¥ì ì¤ì¼ ì ììµëë¤.
- ì¤ëì¤ë¥¼ ì¬ìíë íì íì±íë íì¼ë¡ ê°ì£¼ëì´ ì¤ë¡íë§ëì§ ììµëë¤.
- ì¤ìê° ë¤í¸ìí¬ ì°ê²°(WebSockets ë° WebRTC)ì ì¬ì©íë ì½ë를 ì¤ííë íì ì´ë¬í ì°ê²° ìê°ì´ ì´ê³¼íì¬ ìê¸°ì¹ ìê² ë«íë ê²ì ë°©ì§í기 ìí´ ì¤ë¡íë§ì´ í´ì ë©ëë¤.
- IndexedDB íë¡ì¸ì¤ë ìê° ì´ê³¼ë¥¼ í¼íê³ ì ì¤ë¡íë§ì´ ëì§ ìì ìíë¡ ì ì§ë©ëë¤.
ë¤ë¥¸ ì¸í°íì´ì¤ë¡ì íì¥
>ì¸ì¤í´ì¤ ìì±
Page Visibility APIë Document ì¸í°íì´ì¤ì ë¤ìê³¼ ê°ì ìì±ì ì¶ê°í©ëë¤.
-
íì´ì§ê° ì¬ì©ììê² ì¨ê²¨ì§ ê²ì¼ë¡ ê°ì£¼ëë ìíì´ë©´
true를 ë°ííê³ , ê·¸ë ì§ ìì¼ë©´false를 ë°íí©ëë¤. Document.visibilityStateì½ê¸° ì ì©-
문ìì íì¬ ê°ìì± ìí를 ëíë´ë 문ìì´ì ëë¤. ê°ë¥í ê°ì ë¤ìê³¼ ê°ìµëë¤.
visible-
íì´ì§ ì½í ì¸ ê° ì ì´ë ë¶ë¶ì ì¼ë¡ íìë ì ììµëë¤. ì¤ì ë¡ë íì´ì§ê° ìµìíëì§ ìì ì°½ì¼ë¡ íì±íë íìì ì미í©ëë¤.
-
문ìì íì´ ë°±ê·¸ë¼ì´ëì ìê±°ë ìµìíí ì°½ì ì¼ë¶ì´ê±°ë, ì¥ì¹ì íë©´ì´ êº¼ì ¸ì기 ë문ì íì´ì§ ì½í ì¸ ê° ì¬ì©ììê² íìëì§ ììµëë¤.
ì´ë²¤í¸
Page Visibility APIë Document ì¸í°íì´ì¤ì ë¤ì ì´ë²¤í¸ë¥¼ ì¶ê°í©ëë¤.
visibilitychange-
íì ì½í ì¸ ê° íìëê±°ë ì¨ê²¨ì¡ì ë ë°ìí©ëë¤.
ìì
>íì´ì§ê° ì¨ê²¨ì¡ì ë, ì¤ëì¤ ì¼ì ì¤ì§
ì´ ìì ë ì¬ì©ìê° ë¤ë¥¸ íì¼ë¡ ì íí ë, ì¤ëì¤ë¥¼ ì¼ì ì¤ì§íê³ , ë¤ì ì ííë©´ ì¬ìí©ëë¤.
HTML
<audio
controls
src="https://mdn.github.io/webaudio-examples/audio-basics/outfoxing.mp3"></audio>
JavaScript
const audio = document.querySelector("audio");
// íì´ì§ ê°ìì±ì´ ë³ê²½ë ë를 ì²ë¦¬í©ëë¤:
// - íì´ì§ê° ì¨ê²¨ì ¸ ìì¼ë©´, ëììì ì¼ì ì ì§í©ëë¤.
// - íì´ì§ê° íìëë©´, ëììì ì¬ìí©ëë¤.
document.addEventListener("visibilitychange", () => {
if (document.hidden) {
audio.pause();
} else {
audio.play();
}
});
ê²°ê³¼
ì¤ëì¤ë¥¼ ì¬ìí íì, ë¤ë¥¸ íì¼ë¡ ì ííë¤ê° ë¤ì ì¬ìí´ ë³´ì¸ì.
ëª ì¸ì
| Specification |
|---|
| HTML > # dom-document-visibilitystate > |