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