javascript 中没有 import / include / require ,但是有两种主要方法可以实现您想要的:
1 - 您可以使用 AJAX 调用加载它,然后使用 eval。
这是最直接的方法,但由于 Javascript 安全设置,它仅限于您的域,并且使用 eval 为错误和黑客打开了大门。
2 - 在 HTML 中添加带有脚本 URL 的脚本元素。
绝对是最好的出行方式。您甚至可以从外部服务器加载脚本,并且在您使用浏览器解析器评估代码时它很干净。您可以将script
元素放在head
网页的元素中,也可以放在body
.
此处讨论和说明了这两种解决方案。
现在,有一个你必须知道的大问题。这样做意味着您远程加载代码。现代 Web 浏览器将加载文件并继续执行您当前的脚本,因为它们异步加载所有内容以提高性能。
这意味着如果您直接使用这些技巧,您将无法在要求加载后的下一行使用新加载的代码,因为它仍然会加载。
EG:my_lovely_script.js 包含 MySuperObject
var js = document.createElement("script");
js.type = "text/javascript";
js.src = jsFilePath;
document.body.appendChild(js);
var s = new MySuperObject();
Error : MySuperObject is undefined
然后您按 F5 重新加载页面。它有效!令人困惑...
那么该怎么办呢?
好吧,您可以使用作者在我给您的链接中建议的 hack。综上所述,对于赶时间的人来说,他使用en事件在脚本加载时运行一个回调函数。所以你可以把所有使用远程库的代码放在回调函数中。EG :
function loadScript(url, callback)
{
// adding the script element to the head as suggested before
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
// 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);
}
然后编写要在脚本加载到 lambda 函数后使用的代码:
var myPrettyCode = function() {
// here, do what ever you want
};
然后你运行所有这些:
loadScript("my_lovely_script.js", myPrettyCode);
好,我知道了。但是写所有这些东西很痛苦。
那么,在这种情况下,您可以像往常一样使用出色的免费 jQuery 框架,它可以让您在一行中完成相同的事情:
$.getScript("my_lovely_script.js", function() {
alert("Script loaded and executed.");
// here you can use anything you defined in the loaded script
});