如何通过script元素访问javascript加载的外部脚本

如何通过script元素访问javascript加载的外部脚本,javascript,external,Javascript,External,我想创建自己的资产加载器。为了加载外部脚本,我使用了以下javascript function loadScript(src, callback) { var script = document.createElement("script"); script.onload = function() { document.head.appendChild(script); callback(); }; script.src = src; } 但我认为这不是最优雅的

我想创建自己的资产加载器。为了加载外部脚本,我使用了以下javascript

function loadScript(src, callback) {
  var script = document.createElement("script");
  script.onload = function() {
    document.head.appendChild(script);
    callback();
  };
  script.src = src;
}
但我认为这不是最优雅的解决方案。这个代码片段会让我的HTML代码难看,因为它会在我所有依赖项的头部添加代码

所以我的问题是:不使用下面这行代码就可以访问外部加载的代码吗

document.head.appendChild(script);
我能用纯js执行我的脚本吗

script.execute();
或者更好,有没有办法访问存储在外部js文件中的数据?比如说可变条

var foo = script.get("bar")
我甚至可以执行外部文件的函数吗

script.function(params)
很高兴听到你的想法和经验! 达斯之月


编辑:我忘了排除ajax。我知道我可以通过ajax加载代码并通过eval执行,但如果您在本地测试代码,那就不是一个好主意,因为您需要一个像XAMPP Apache这样的服务器将ajax请求发送到本地文件。

您可以尝试以下方法

内部脚本:

function appendScript(src) {
    var script = document.createElement(‘script’);
    script.src = src;
    document.head.appendChild(script);
}
function loadedScript() {
   // run something
}

loadedScript()
外部脚本:

function appendScript(src) {
    var script = document.createElement(‘script’);
    script.src = src;
    document.head.appendChild(script);
}
function loadedScript() {
   // run something
}

loadedScript()

加载文件后,外部代码将只运行loadedScript。

问题的关键似乎是完全避免document.head.appendChild。这是个不错的主意。所以我也可以在其他js文件中执行loadedScript。尼斯:但是,正如@JaredGoguen所说,我想完全避免document.head.appendChild。以防止丑陋的代码。为了使我的js代码难以在web控制台中查看:在这种情况下,我建议将其放在函数中,而不是脚本文件中。例如调用函数A和函数A将运行函数B和函数C,然后这些将执行所需的相关操作tho。如果我想访问我根本没有编写的js代码,那就糟糕了。好吧,也许你可以尝试要求特定的模块,并运行充当var的代码作为模块require.js呢?我不知道。但是它不会在引擎盖下添加脚本标记吗?我查看了require.js文件。他们只是评估加载的代码,这是真的吗?这不是很不安全吗?我总是听说Eval是邪恶的,那么require.js是怎么回事?他们是如何准确地访问他们加载的代码的?你将以这样或那样的方式对代码进行评估。eval是一个邪恶的习语,它来自于将用户生成的输入作为代码进行评估。如果你正在导入一个恶意脚本,不管怎样,它都不会有好的结局。典型的语法是var importedModule=require'importPath.js'。importedModule中存在的内容可以由module.exports控制。