UNPKG

lenye_base

Version:

基础方法

92 lines (78 loc) 1.96 kB
'use strict'; 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;