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 });