jsFiddle shows 3 situations: Kick the process off with a media.load() then either: 1) Polling a currentTime change until it does not throw an exception. (No effect.) 2) Polling readyState until it equals 4 and then changing currentTime. (No effect.) 3) Polling seekable.length until is it greater than 0 and then changing currentTime. (Works!) While in many ways it does make sense that you cannot change currentTime before seekable.length>0, on the other hand, it does not make sense that the readyState=4 when seekable.length=0.