1 /** 2 * Hilo 3 * Copyright 2015 alibaba.com 4 * Licensed under the MIT License 5 */ 6 7 /** 8 * @language=en 9 * @private 10 * @class javascript or JSONP loader 11 * @module hilo/loader/ScriptLoader 12 * @requires hilo/core/Class 13 */ 14 var ScriptLoader = Class.create({ 15 load: function(data){ 16 var me = this, src = data.src, isJSONP = data.type == 'jsonp'; 17 18 if(isJSONP){ 19 var callbackName = data.callbackName || 'callback'; 20 var callback = data.callback || 'jsonp' + (++ScriptLoader._count); 21 var win = window; 22 23 if(!win[callback]){ 24 win[callback] = function(result){ 25 delete win[callback]; 26 } 27 } 28 } 29 30 if(isJSONP) src += (src.indexOf('?') == -1 ? '?' : '&') + callbackName + '=' + callback; 31 if(data.noCache) src += (src.indexOf('?') == -1 ? '?' : '&') + 't=' + (+new Date()); 32 33 var script = document.createElement('script'); 34 script.type = 'text/javascript'; 35 script.async = true; 36 script.onload = me.onLoad.bind(me); 37 script.onerror = me.onError.bind(me); 38 script.src = src; 39 if(data.id) script.id = data.id; 40 document.getElementsByTagName('head')[0].appendChild(script); 41 }, 42 43 onLoad: function(e){ 44 var script = e.target; 45 script.onload = script.onerror = null; 46 return script; 47 }, 48 49 onError: function(e){ 50 var script = e.target; 51 script.onload = script.onerror = null; 52 return e; 53 }, 54 55 Statics: { 56 _count: 0 57 } 58 59 });