Socket
Socket
Sign inDemoInstall

browser-script-loader

Package Overview
Dependencies
0
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 3.0.3 to 3.0.4

2

package.json
{
"name": "browser-script-loader",
"version": "3.0.3",
"version": "3.0.4",
"description": "a simple & lightweight script loader,provide sync & async way to load script",

@@ -5,0 +5,0 @@ "main": "script-loader.js",

@@ -9,132 +9,140 @@ /**

'use strict';
'use strict';
angular
.module('ngUtils.scriptLoader', ['ng'])
.factory('$scriptLoader', ScriptLoaderConstructor);
angular
.module('ngUtils.scriptLoader', ['ng'])
.factory('$scriptLoader', ScriptLoaderConstructor);
ScriptLoaderConstructor.$inject = ['$q'];
function ScriptLoaderConstructor($q) {
ScriptLoaderConstructor.$inject = ['$q'];
function ScriptLoaderConstructor($q) {
// dynamically add base tag as well as css and javascript files.
// we can't add css/js the usual way, because some browsers (FF) eagerly prefetch resources
// before the base attribute is added, causing 404 and terribly slow loading of the docs app.
function outerHTML(node) {
// if IE, Chrome take the internal method otherwise build one
return node.outerHTML || (function (n) {
var div = document.createElement('div'), h;
div.appendChild(n);
h = div.innerHTML;
div = null;
return h;
})(node);
}
// dynamically add base tag as well as css and javascript files.
// we can't add css/js the usual way, because some browsers (FF) eagerly prefetch resources
// before the base attribute is added, causing 404 and terribly slow loading of the docs app.
function outerHTML(node) {
// if IE, Chrome take the internal method otherwise build one
return node.outerHTML || (function (n) {
var div = document.createElement('div'), h;
div.appendChild(n);
h = div.innerHTML;
div = null;
return h;
})(node);
}
function createScriptDom(scriptSrc) {
var scriptDom = document.createElement("script");
// 如果以http://或https://开头,则使用原始路径
scriptDom.src = ~scriptSrc.search(/^((http|https):\/\/)/g) ? scriptSrc : (ScriptLoader.BASE_PATH + scriptSrc);
function createScriptDom(scriptSrc) {
var scriptDom = document.createElement("script");
// 如果以http://或https://开头,则使用原始路径
scriptDom.src = ~scriptSrc.search(/^((http|https):\/\/)/g) ? scriptSrc : (ScriptLoader.BASE_PATH + scriptSrc);
return scriptDom;
}
return scriptDom;
}
var headEl = document.getElementsByTagName('head')[0],
scriptsCache = []; // 已加载过的脚本缓存
var headEl = document.getElementsByTagName('head')[0],
scriptsCache = []; // 已加载过的脚本缓存
var ScriptLoader = {
var ScriptLoader = {
BASE_PATH: "",
BASE_PATH: "",
/**
* 同步方式加载script,这种方式加载多个脚本浏览器会并行下载且按标签顺序执行,但是会阻塞后续其他资源(即后面script标签里js代码的执行)
* @param scriptList 同步加载脚本列表
*/
loadScriptsSync: function (scriptList) {
/**
* 同步方式加载script,这种方式加载多个脚本浏览器会并行下载且按标签顺序执行,但是会阻塞后续其他资源(即后面script标签里js代码的执行)
* @param scriptList 同步加载脚本列表
*/
loadScriptsSync: function (scriptList) {
scriptList.forEach(function (scriptSrc) {
scriptList.forEach(function (scriptSrc) {
// 当前脚本第一次加载
if (!~scriptsCache.indexOf(scriptSrc)) {
// 当前脚本第一次加载
if (!~scriptsCache.indexOf(scriptSrc)) {
document.write(outerHTML(createScriptDom(scriptSrc)));
scriptsCache.push(scriptSrc);
}
document.write(outerHTML(createScriptDom(scriptSrc)));
scriptsCache.push(scriptSrc);
}
});
},
});
},
/**
* 异步方式加载script,这种方式加载多个脚本浏览器会并行下载且一下载完成就执行(执行顺序依据下载完成时间,所以顺序不定),但是不会阻塞后续其他资源下载
* @param scriptList 需要加载的文件列表
* @param loadedCallback 脚本队列执行完之后执行的回调
*/
loadScriptsAsync: function (scriptList, loadedCallback) {
/**
* 异步方式加载script,这种方式加载多个脚本浏览器会并行下载且一下载完成就执行(执行顺序依据下载完成时间,所以顺序不定),但是不会阻塞后续其他资源下载
* @param scriptList 需要加载的文件列表
* @param loadedCallback 脚本队列执行完之后执行的回调
*/
loadScriptsAsync: function (scriptList, loadedCallback) {
function addCallbackWhenScriptLoaded(script, resolve, func) {
function addCallbackWhenScriptLoaded(script, resolve, func) {
script.onloadDone = false;
script.onloadDone = false;
// 脚本执行完成之后执行的回调,onreadystatechange在IE中有效,onload在其他浏览器中有效
script.onload = function () {
resolve();
// helpful for gc
script = null;
};
script.onreadystatechange = function () {
// 脚本执行完成之后执行的回调,onreadystatechange在IE中有效,onload在其他浏览器中有效
script.onload = function () {
resolve();
// helpful for gc
script = null;
};
script.onreadystatechange = function () {
if (("loaded" === script.readyState || "complete" === script.readyState) && !script.onloadDone) {
script.onloadDone = true;
script.onload();
}
};
if (("loaded" === script.readyState || "complete" === script.readyState) && !script.onloadDone) {
script.onloadDone = true;
script.onload();
}
};
}
}
var scriptPromises = scriptList.map(function (scriptSrc) {
var scriptPromises;
return $q(function (resolve) {
if (!scriptList || !scriptList.length) {
scriptPromises = $q.resolve();
} else {
scriptPromises = scriptList.map(function (scriptSrc) {
var scriptDom;
// 脚本第一次加载
if (!~scriptsCache.indexOf(scriptSrc)) {
return $q(function (resolve) {
scriptDom = createScriptDom(scriptSrc);
addCallbackWhenScriptLoaded(scriptDom, resolve);
headEl.appendChild(scriptDom);
var scriptDom;
// 脚本第一次加载
if (!~scriptsCache.indexOf(scriptSrc)) {
scriptsCache.push(scriptSrc);
scriptDom = createScriptDom(scriptSrc);
addCallbackWhenScriptLoaded(scriptDom, resolve);
headEl.appendChild(scriptDom);
} else {
resolve();
}
scriptsCache.push(scriptSrc);
});
} else {
resolve();
}
});
});
return $q.all(scriptPromises).then(loadedCallback || function noop(promises) {return promises});
});
}
},
return $q.all(scriptPromises).then(loadedCallback || function noop(promises) {
return promises;
});
/**
* 为最大提高网站加载速度,将不会立即用到的资源延时加载,避免跟需要立即执行的脚本抢占线程
* @param scriptList
* @param loadedCallback
*/
loadScriptAsyncDelayed: function (scriptList, loadedCallback) {
},
return $q(function (resolve) {
/**
* 为最大提高网站加载速度,将不会立即用到的资源延时加载,避免跟需要立即执行的脚本抢占线程
* @param scriptList
* @param loadedCallback
*/
loadScriptAsyncDelayed: function (scriptList, loadedCallback) {
window.setTimeout(function () {
resolve(ScriptLoader.loadScriptsAsync(scriptList, loadedCallback));
}, 500);
});
return $q(function (resolve) {
}
};
window.setTimeout(function () {
resolve(ScriptLoader.loadScriptsAsync(scriptList, loadedCallback));
}, 500);
});
return ScriptLoader;
}
};
}
return ScriptLoader;
}
})(window.angular);

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc