Как заставить работать скрипт на JS вне страницы?
На каждом тике таймера записывайте текущее время.
на следующем тике получайте текущее время и смотрите разницу, на эту разницу корректируйте таймер.
То есть у вас например тик раз в секунду. Но тут между тиками прошло вдруг 30 (вкладка поменялась, пользователь переключится в другое приложение, компьютер внезапно уснул - все что угодно) - значит надо отнять из оставшегося времени не секунду а 30.
Можно попробовать вынести в Web Worker