在javascript中没有导入/包含/要求,但是有两种主要方法可以实现您想要的内容:
1 - 您可以使用 AJAX 调用加载它,然后使用 eval。
这是最直接的方法,但由于Javascript安全设置,它仅限于您的领域,使用eval正在为错误和黑客打开大门。
2 - 在 HTML 中添加具有脚本 URL 的脚本元素。
绝对是最好的方法。您甚至可以从外部服务器加载脚本,并且当您使用浏览器解析器评估代码时,它很干净。您可以将该元素放在网页的元素中,也可以放在 .script
head
body
这里讨论并说明了这两种解决方案。
现在,您必须了解一个大问题。这样做意味着您远程加载代码。现代 Web 浏览器将加载文件并继续执行当前脚本,因为它们异步加载所有内容以提高性能。
这意味着,如果您直接使用这些技巧,则在要求加载代码后,您将无法在下一行使用新加载的代码,因为它仍将加载。
例如: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 重新加载页面。它的工作原理!混乱。。。
那么该怎么办呢?
好吧,您可以使用作者在我给您的链接中建议的黑客。总之,对于赶时间的人,他在加载脚本时使用en event来运行回调函数。因此,您可以使用远程库将所有代码放在回调函数中。例如:
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
});