lenye_base
Version:
基础方法
92 lines (78 loc) • 1.96 kB
JavaScript
;
require('./get_tag.js');
var is_function = require('./is_function.js');
var is_string = require('./is_string.js');
require('./ifnodeorbrowser.js');
require('./windowsimulate.js');
var ua = require('./ua.js');
var attr = require('./attr.js');
var c = require('./c.js');
var hash = require('./hash.js');
/* eslint-disable no-invalid-this */
/**
* load js
* 1. bbo.loadjs("//your_url/a.js",func);
* 2. bbo.loadjs("//your_url/a.js","only_id",func);
*/
var _cache = {
urls: {},
logs: {}
};
var _insertScripts = function (arr, callback) {
for (var i = 0; i < arr.length; i++) {
_insertScript(arr[i], loaded);
}
var _index = 0;
function loaded() {
_index++;
if (_index >= arr.length) {
callback && callback();
}
}
};
var _insertScript = function (src, callback) {
var script = c('script');
attr(script, 'type', 'text/javascript');
attr(script, 'src', src);
attr(script, 'charset', 'utf-8');
document.getElementsByTagName('head')[0].appendChild(script);
if (/msie/.test(ua('l'))) {
script.onreadystatechange = function () {
if (this.readyState === 'loaded' || this.readyState === 'complete') {
callback();
}
};
} else if (/gecko/.test(ua('l'))) {
script.onload = function () {
callback();
};
} else {
setTimeout(function () {
callback();
}, 50);
}
};
function loadjs(url, b, c) {
var onlyId;
var callback;
if (is_function(b)) {
onlyId = String(hash(String(url)));
callback = b;
} else if (typeof b === 'undefined') {
onlyId = String(hash(String(url)));
callback = null;
} else {
onlyId = String(b);
callback = c;
}
if (_cache.urls[onlyId]) {
callback && callback();
} else {
var func = is_string(url) ? _insertScript : _insertScripts;
func.call(this, url, function () {
_cache.urls[onlyId] = true;
callback && callback();
});
}
}
module.exports = loadjs;