diff options
Diffstat (limited to 'src/library_browser.js')
-rw-r--r-- | src/library_browser.js | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/library_browser.js b/src/library_browser.js index f3654f81..51c0cf78 100644 --- a/src/library_browser.js +++ b/src/library_browser.js @@ -133,8 +133,18 @@ mergeInto(LibraryManager.library, { Module["preloadedAudios"][name] = audio; if (onload) onload(byteArray); } + function fail() { + if (done) return; + done = true; + Module["preloadedAudios"][name] = new Audio(); // empty shim + if (onerror) onerror(); + } if (Browser.hasBlobConstructor) { - var b = new Blob([byteArray], { type: getMimetype(name) }); + try { + var b = new Blob([byteArray], { type: getMimetype(name) }); + } catch(e) { + return fail(); + } var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this! var audio = new Audio(); audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926 @@ -174,8 +184,7 @@ mergeInto(LibraryManager.library, { finish(audio); // try to use it even though it is not necessarily ready to play }, 10000); } else { - Module["preloadedAudios"][name] = new Audio(); // empty shim - if (onerror) onerror(); + return fail(); } }; Module['preloadPlugins'].push(audioPlugin); @@ -252,7 +261,7 @@ mergeInto(LibraryManager.library, { }, requestFullScreen: function() { - var canvas = Module.canvas; + var canvas = Module['canvas']; function fullScreenChange() { var isFullScreen = false; if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] || @@ -375,7 +384,7 @@ mergeInto(LibraryManager.library, { Module['noExitRuntime'] = true; var jsFunc = FUNCTION_TABLE[func]; - var wrapper = function() { + Browser.mainLoop.runner = function() { if (Browser.mainLoop.queue.length > 0) { var start = Date.now(); var blocker = Browser.mainLoop.queue.shift(); @@ -393,7 +402,7 @@ mergeInto(LibraryManager.library, { } console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + ' ms'); //, left: ' + Browser.mainLoop.remainingBlockers); Browser.mainLoop.updateStatus(); - setTimeout(wrapper, 0); + setTimeout(Browser.mainLoop.runner, 0); return; } if (Browser.mainLoop.shouldPause) { @@ -427,11 +436,11 @@ mergeInto(LibraryManager.library, { } if (fps && fps > 0) { Browser.mainLoop.scheduler = function() { - setTimeout(wrapper, 1000/fps); // doing this each time means that on exception, we stop + setTimeout(Browser.mainLoop.runner, 1000/fps); // doing this each time means that on exception, we stop } } else { Browser.mainLoop.scheduler = function() { - Browser.requestAnimationFrame(wrapper); + Browser.requestAnimationFrame(Browser.mainLoop.runner); } } Browser.mainLoop.scheduler(); |