From 1d795c0643b3402a98f9f4062ea18d57a987ee46 Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Thu, 1 Nov 2012 11:07:26 -0500 Subject: [PATCH] Pull include/util.js from noVNC. Pull version 51562999c7 load_scripts fixes. --- include/util.js | 50 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/include/util.js b/include/util.js index ab2e1c1..67d2133 100644 --- a/include/util.js +++ b/include/util.js @@ -217,32 +217,52 @@ Util.conf_defaults = function(cfg, api, defaults, arr) { Util.get_include_uri = function() { return (typeof INCLUDE_URI !== "undefined") ? INCLUDE_URI : "include/"; } +Util._loading_scripts = []; Util._pending_scripts = []; Util.load_scripts = function(files) { - var head = document.getElementsByTagName('head')[0], - ps = Util._pending_scripts; + var head = document.getElementsByTagName('head')[0], script, + ls = Util._loading_scripts, ps = Util._pending_scripts; for (var f=0; f 0 && (ls[0].readyState === 'loaded' || + ls[0].readyState === 'complete')) { + // For IE, append the script to trigger execution + var s = ls.shift(); + //console.log("loaded script: " + s.src); + head.appendChild(s); + } + if (!this.readyState || + (Util.Engine.presto && this.readyState === 'loaded') || + this.readyState === 'complete') { if (ps.indexOf(this) >= 0) { - //console.log("loaded script: " + this.src); + this.onload = this.onreadystatechange = null; + //console.log("completed script: " + this.src); ps.splice(ps.indexOf(this), 1); - } - // Call window.onscriptsload after last script loads - if (ps.length === 0 && window.onscriptsload) { - window.onscriptsload(); + + // Call window.onscriptsload after last script loads + if (ps.length === 0 && window.onscriptsload) { + window.onscriptsload(); + } } } + }; + // In-order script execution tricks + if (Util.Engine.trident) { + // For IE wait until readyState is 'loaded' before + // appending it which will trigger execution + // http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order + ls.push(script); + } else { + // For webkit and firefox set async=false and append now + // https://developer.mozilla.org/en-US/docs/HTML/Element/script + script.async = false; + head.appendChild(script); } + ps.push(script); } }