CSPRNG in JavaScript using Audio and Video
window.crypto.getRandomValues() is the best you can do.  Unfortunately, at the time of writing, too many browsers don't support window.crypto.getRandomValues(): see Compatibility of window.crypto.getRandomValues().

The alternative is to use fallback methods.  However, those fallback methods are kind've hacky, of dubious security, slow, and have other limitations.  For more on the available fallback methods, see Generate cryptographically strong pseudorandom numbers in Javascript?.

Therefore, life kinda sucks.  Basically, the best you can do is test for the existence of window.crypto.getRandomValues() using feature testing.  If it exists, great! use it.  If it doesn't exist, fall back to one of the fallback methods -- in that case, life is unhappy, but what can you do, there's no better option.