Fix: evaluate JS on main thread