How to dynamically execute/eval JavaScript code that contains an ES6 module / requires some dependencies?
我希望我的用户能够在我的javascript应用程序中使用javascript作为脚本语言。为此,我需要动态地执行源代码。
动态执行javascript有两个主要选项:
a)采用
b)将一个
只要在动态执行的源代码中不使用任何
要执行的用户源代码示例:
1 2 3 4 5 6 7 | import Atom from './src/core.atom.js': window.createTreeModel = function(){ var root = new Atom('root'); root.createChildAtom('child'); return root; } |
示例应用程序代码以说明该动态代码的可能用法:
a)使用EVE
1 2 3 4 5 | var sourceCode = editor.getText(); window.createTreeModel = undefined; eval(sourceCode); var model = window.createTreeModel(); treeView.setModel(model); |
b)使用DOM修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 | var sourceCode = editor.getText(); window.createTreeModel = undefined; var script ="<script > "+ sourceCode +" " + ""; $('body').append(script); var model = window.createTreeModel(); treeView.setModel(model); |
如果我没有指定脚本类型或对选项B使用
我首先想到这可能是由于异步加载。但是,等待脚本标记加载完成之前,
脚本标记加载后异步执行的示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function loadScript(sourceCode, callback){ // Adding the script tag to the head as suggested before var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.type = 'application/javascript'; script.innerHTML = sourceCode; //script.async=false; // Then bind the event to the callback function. // There are several events for cross browser compatibility. script.onreadystatechange = callback; script.onload = callback; // Fire the loading head.appendChild(script); } |
——
1 2 3 4 | loadScript(sourceCode, function(){ var model = window.createModel(); console.log('model:' + model); }); |
如果我使用
=>i.动态添加到dom后,如何强制执行
= >Ⅱ。如何评估包含
=>iii.允许用户源代码定义可以动态解析的依赖项的好方法是什么?
相关问题和文章:
执行以字符串形式存储的javascript代码
https://www.html5rocks.com/en/tutorials/security/sandboxed iframes/安全沙盒评估
如何在另一个javascript文件中包含一个javascript文件?
为什么script.onload不能在chrome用户脚本中工作?
如何导入在HTML内的