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