setTimeout と同様に動作するタイマー API が必要ですが、ページがアクティブ/表示されていないときにタイマーが一時停止するという違いがあります。
setActiveTimeout(function(){ alert('hi') }, 10000);
つまり、ユーザーがタイマーの 5 秒後に別のタブに切り替え、1 時間待ってから元に戻すと、元に戻ってから 5 秒後にアラートが表示されます。
その理由は、a) CPU サイクルを節約するため、b) ユーザーが非同期の定期的な更新を含むページに戻ったときに動作の「パイルアップ」がないためです。
新しいページ可視性 API や requestAnimationFrame() 、またはそれらの組み合わせを使用して、この種のことを行うライブラリを構築してみることができると思いますが、複雑に思えます。誰かが簡単な解決策を知っているか、またはこれを行うライブラリ。
ありがとう。