From 4892fc393633ff5317cdaffe66cd0bc7dce5b689 Mon Sep 17 00:00:00 2001 From: liteng <930372551@qq.com> Date: Thu, 20 Dec 2018 19:55:35 +0800 Subject: [PATCH] =?UTF-8?q?js=E6=94=B9=E4=B8=BA=E5=A4=9A=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E4=B8=8B=E8=BD=BD=EF=BC=8C=E6=8C=89=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E6=89=A7=E8=A1=8C=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ShadowEditor.Web/src/Application.js | 27 +++++----- .../src/package/PackageManager.js | 49 +++++++------------ ShadowEditor.Web/src/utils/CssUtils.js | 22 --------- ShadowEditor.Web/src/utils/JsLoader.js | 49 +++++++++++++------ ShadowEditor.Web/src/utils/JsUtils.js | 30 ------------ 5 files changed, 67 insertions(+), 110 deletions(-) delete mode 100644 ShadowEditor.Web/src/utils/CssUtils.js delete mode 100644 ShadowEditor.Web/src/utils/JsUtils.js diff --git a/ShadowEditor.Web/src/Application.js b/ShadowEditor.Web/src/Application.js index 14fae0a1..8245e3b1 100644 --- a/ShadowEditor.Web/src/Application.js +++ b/ShadowEditor.Web/src/Application.js @@ -81,19 +81,19 @@ function Application(container, options) { flexDirection: 'column' }, children: [{ - xtype: 'div', - style: { - position: 'relative', - flex: 1 + xtype: 'div', + style: { + position: 'relative', + flex: 1 + }, + children: [ + this.viewport, + this.script, + this.player + ] }, - children: [ - this.viewport, - this.script, - this.player - ] - }, - this.bottomPanel, - this.statusBar + this.bottomPanel, + this.statusBar ] }, this.sidebar2, @@ -110,6 +110,9 @@ function Application(container, options) { // Html5 Worker // var script = document.querySelector('script[src$="ShadowEditor.js" i]').src; // http://localhost:2000/dist/ShadowEditor.js // this.worker = new Worker(script); + + var eval2 = eval; + this.a = eval2('var a = 3'); } // ------------------------- 程序控制 ------------------------------- diff --git a/ShadowEditor.Web/src/package/PackageManager.js b/ShadowEditor.Web/src/package/PackageManager.js index eab9f7d3..f9500524 100644 --- a/ShadowEditor.Web/src/package/PackageManager.js +++ b/ShadowEditor.Web/src/package/PackageManager.js @@ -15,9 +15,8 @@ function PackageManager() { /** * 加载包 * @param {*} names 包名或包名列表 - * @param {*} sort 资源是否按顺序下载 */ -PackageManager.prototype.require = function (names, sort = false) { +PackageManager.prototype.require = function (names) { names = Array.isArray(names) ? names : [names]; var assets = []; @@ -47,42 +46,32 @@ PackageManager.prototype.require = function (names, sort = false) { }); } - return this._load(assets, sort); + return this._load(assets); }; -PackageManager.prototype._load = async function (assets = [], sort = false) { +PackageManager.prototype._load = function (assets = []) { var cssLoader = new CssLoader(); var jsLoader = new JsLoader(); - if (sort) { - assets.forEach(async n => { - if (n.toLowerCase().endsWith('.css')) { - await cssLoader.load(n); - } else if (n.toLowerCase().endsWith('.js')) { - await jsLoader.load(n); - } else { - console.warn(`PackageManager: 未知资源类型${n}。`); - } - }); - } else { - var promises = assets.map(n => { + var promises = assets.map(n => { + if (n.toLowerCase().endsWith('.css')) { + return cssLoader.load(n); + } else if (n.toLowerCase().endsWith('.js')) { + return jsLoader.load(n); + } else { + console.warn(`PackageManager: 未知资源类型${n}。`); return new Promise(resolve => { - if (n.toLowerCase().endsWith('.css')) { - cssLoader.load(n).then(() => { - resolve(); - }); - } else if (n.toLowerCase().endsWith('.js')) { - jsLoader.load(n).then(() => { - resolve(); - }); - } else { - console.warn(`PackageManager: 未知资源类型${n}。`); - resolve(); - } + resolve(); }); + } + }); + + return new Promise(resolve => { + Promise.all(promises).then(() => { + jsLoader.eval(); + resolve(); }); - await Promise.all(promises); - } + }); }; export default PackageManager; \ No newline at end of file diff --git a/ShadowEditor.Web/src/utils/CssUtils.js b/ShadowEditor.Web/src/utils/CssUtils.js deleted file mode 100644 index a74c6342..00000000 --- a/ShadowEditor.Web/src/utils/CssUtils.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * 异步加载css文件 - * @author tengge / https://github.com/tengge1 - * @param {*} url css文件url - */ -function loadCss(url) { - var head = document.getElementsByTagName('head')[0]; - var link = document.createElement('link'); - link.type = 'text/css'; - link.rel = 'stylesheet'; - link.href = url; - head.appendChild(link); -}; - -/** - * css工具类 - */ -const CssUtils = { - load: loadCss -}; - -export default CssUtils; \ No newline at end of file diff --git a/ShadowEditor.Web/src/utils/JsLoader.js b/ShadowEditor.Web/src/utils/JsLoader.js index 741bff4d..c14109ac 100644 --- a/ShadowEditor.Web/src/utils/JsLoader.js +++ b/ShadowEditor.Web/src/utils/JsLoader.js @@ -3,27 +3,44 @@ * @author tengge / https://github.com/tengge1 */ function JsLoader() { - + this.assets = []; }; JsLoader.prototype.load = function (url) { - var head = document.getElementsByTagName('head')[0]; - var script = document.createElement('script'); - script.type = 'text/javascript'; - script.src = url; - head.appendChild(script); - + var data = { + url, + script: null + }; + this.assets.push(data); return new Promise(resolve => { - script.onload = event => { - console.log(script.src); - script.onload = script.onerror = null; - resolve(script); - }; - script.onerror = event => { - script.onload = script.onerror = null; - console.warn(`JsLoader: ${url}加载失败!`); + fetch(url).then(response => { + if (response.ok) { + response.text().then(text => { + data.script = text; + resolve(data); + }); + } else { + console.warn(`JsLoader: ${url}下载失败!。`); + resolve(null); + } + }).catch(() => { + console.warn(`JsLoader: ${url}下载出错!。`); resolve(null); - }; + }); + }); +}; + +JsLoader.prototype.eval = function () { + var eval2 = eval; + + this.assets.forEach(n => { + if (n.script) { + try { + eval2(n.script); + } catch (e) { + console.warn(`JsLoader: ${n.url}解析出错!`); + } + } }); }; diff --git a/ShadowEditor.Web/src/utils/JsUtils.js b/ShadowEditor.Web/src/utils/JsUtils.js deleted file mode 100644 index c570ed54..00000000 --- a/ShadowEditor.Web/src/utils/JsUtils.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * 异步加载js文件 - * @author tengge / https://github.com/tengge1 - * @param {*} url js文件url - * @param {*} callback 回调函数 - */ -function loadJs(url, callback) { - var head = document.getElementsByTagName('head')[0]; - var script = document.createElement('script'); - script.type = 'text/javascript'; - script.src = url; - head.appendChild(script); - if (typeof (callback) === 'function') { - script.onload = script.onreadystatechange = function () { - if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") { - callback(); - script.onload = script.onreadystatechange = null; - } - }; - } -}; - -/** - * js工具类 - */ -const JsUtils = { - load: loadJs -}; - -export default JsUtils; \ No newline at end of file