Hilo/build/cmd/hilo/loader/ScriptLoader.js
2022-06-29 10:45:02 +08:00

69 lines
1.7 KiB
JavaScript

/**
* hilojs 2.0.3 for cmd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define(function(require, exports, module){
var Class = require('hilo/core/Class');
/**
* @language=en
* @private
* @class javascript or JSONP loader
* @module hilo/loader/ScriptLoader
* @requires hilo/core/Class
*/
var ScriptLoader = Class.create({
load: function(data){
var me = this, src = data.src, isJSONP = data.type == 'jsonp';
if(isJSONP){
var callbackName = data.callbackName || 'callback';
var callback = data.callback || 'jsonp' + (++ScriptLoader._count);
var win = window;
if(!win[callback]){
win[callback] = function(result){
delete win[callback];
};
}
src += (src.indexOf('?') == -1 ? '?' : '&') + callbackName + '=' + callback;
}
if(data.noCache) src += (src.indexOf('?') == -1 ? '?' : '&') + 't=' + (+new Date());
var script = document.createElement('script');
script.type = 'text/javascript';
script.async = true;
script.onload = me.onLoad.bind(me);
script.onerror = me.onError.bind(me);
script.src = src;
if(data.id) script.id = data.id;
document.getElementsByTagName('head')[0].appendChild(script);
},
onLoad: function(e){
var script = e.target;
script.onload = script.onerror = null;
return script;
},
onError: function(e){
var script = e.target;
script.onload = script.onerror = null;
return e;
},
Statics: {
_count: 0
}
});
return ScriptLoader;
});