Javascript 如何在另一个js文件中包含js文件?
我如何将一个js文件包含到另一个js文件中,以便遵守规则并避免代码重复。这不可能直接实现。你也可以编写一些预处理器来处理这个问题 如果我理解正确,那么以下是有助于实现这一目标的措施:Javascript 如何在另一个js文件中包含js文件?,javascript,Javascript,我如何将一个js文件包含到另一个js文件中,以便遵守规则并避免代码重复。这不可能直接实现。你也可以编写一些预处理器来处理这个问题 如果我理解正确,那么以下是有助于实现这一目标的措施: 使用一个预处理器,它将运行JS文件,例如查找“@import somefile.JS”之类的模式,并用实际文件的内容替换它们。Nicholas Zakas(Yahoo)用Java编写了一个这样的库,您可以使用() 如果您使用的是Ruby on Rails,那么您可以尝试使用Jammit asset打包,它使用as
- 使用一个预处理器,它将运行JS文件,例如查找“@import somefile.JS”之类的模式,并用实际文件的内容替换它们。Nicholas Zakas(Yahoo)用Java编写了一个这样的库,您可以使用()
- 如果您使用的是Ruby on Rails,那么您可以尝试使用Jammit asset打包,它使用assets.yml配置文件,您可以在其中定义可以包含多个文件的包,然后在实际网页中按包名引用它们
- 尝试使用模块加载器或脚本加载器,这样可以控制加载顺序并利用并行下载
希望有帮助。您需要编写文档。写入对象:
document.write('<script type="text/javascript" src="file.js" ></script>');
document.write(“”);
并将其放在主javascript文件中您只能在HTML页面中包含一个脚本文件,而不能在另一个脚本文件中包含。也就是说,您可以编写JavaScript,将“包含的”脚本加载到同一页面:
var imported = document.createElement('script');
imported.src = '/path/to/imported/script';
document.head.appendChild(imported);
但是,您的代码很可能依赖于“包含的”脚本,在这种情况下,它可能会失败,因为浏览器将异步加载“导入的”脚本。您最好的选择是简单地使用第三方库,如jQuery或YUI,这为您解决了这个问题
// jQuery
$.getScript('/path/to/imported/script.js', function()
{
// script is now loaded and executed.
// put your dependent JS here.
});
我不同意
文档。编写技巧(请参阅)。我喜欢document.getElementsByTagName('head')[0].appendChild(…)
(请参阅),但有一个重要问题:脚本执行顺序
最近,我花了很多时间复制,甚至著名的jQuery插件也使用相同的技术(参见src)加载文件,但其他人也报告了这个问题。假设您有一个JavaScript库,它由许多脚本组成,一个loader.js
加载所有部分。有些部分相互依赖。假设您在loader.js
之后包含另一个main.js
脚本,该脚本使用loader.js
中的对象。问题是,有时在loader.js
加载所有脚本之前执行main.js
。$(document.ready)(函数(){/*code here*/})的用法代码>在main.js
脚本中没有帮助。在loader.js
中使用级联onload
事件处理程序将使脚本按顺序加载而不是并行加载,并使main.js
脚本难以使用,它应该只是loader.js
之后的某个包含
通过在我的环境中重现这个问题,我可以看到**Internet Explorer 8中脚本的执行顺序在包含JavaScript*方面可能有所不同。如果需要包含相互依赖的脚本,这是一个非常困难的问题。中描述了该问题,建议的解决方法是使用文档。writeln
:
document.writeln("<script type='text/javascript' src='Script1.js'></script>");
document.writeln("<script type='text/javascript' src='Script2.js'></script>");
document.writeln(“”);
文件。书面形式(“”);
因此,在“脚本并行下载,但按照写入页面的顺序执行”的情况下,在从document.getElementsByTagName('head')[0].appendChild(…)
技术更改为document.writeln
之后,我再也没有看到这个问题
因此,我建议您使用document.writeln
更新:如果有人感兴趣,他们可以尝试在Internet Explorer中加载(并重新加载)(页面使用文档.getElementsByTagName('head')[0]。appendChild(…)
技术),然后与使用的文档.writeln进行比较。(页面的代码比较脏,不是我写的,但可以用来重现问题)。你能举个例子吗?我编辑了我的答案,以便更好地解释我的想法。希望这一次我足够清楚。可能的重复或现在看来是典型的重复选择。呃,请不要提倡使用文档。write()
@Matt Ball:你是对的,但既然Vahan是新来的,你可能想解释原因。@Konerak:.+1我不同意文档的批评者。write
。我在回答这个问题时写了更多的信息。@Matt:有趣的是,在这个问题上投票最多的答案提倡使用document。写一些简单的事情,比如加载脚本。我只能重复:如果使用$。getScript
加载并执行第一个脚本后,将开始加载第二个依赖的脚本。它是顺序加载,而不是并行加载。此外,如果有人包含了per
这样的loader.js
文件,它加载了一些JavaScript库(比如jQuery UI),那么就不能只加载在下一个
中使用库的main.js
。所以JavaScript库的使用将不像往常那么容易。为了理解:我想使用这种方法,但我们应该提出更多建议以使其切实可行。如果是您的第一个建议,我们必须使用imported.onload
来级联脚本。但在这种情况下,我们仍然面临着我所描述的同样的问题