使用Javascript引用或包含文件的最佳方法是什么,寻找PHP的include()能力的最接近的功能。
答案 0 :(得分:7)
我会查看Javascript equivalent for PHP's include:
本文是“移植”的一部分 PHP到Javascript'项目,其目标 缩小发展之间的差距 对于PHP&的JavaScript。
没有直接的等效内容 - 您可以使用我上面链接的功能,也可以使用document.write
写出一个新的script
标记,其中src
指向您希望的文件包括。
编辑:以下是我的意思的基本示例:
function include(path) {
document.write(
"<script type=\"text/javascript\" src=\"" + path + "\"></script>"
);
}
编辑2:呃,这是一个多么丑陋的例子 - 这是一个更好的例子:
function include(path) {
script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", path);
if (head = document.getElementsByTagName("head")[0]) {
head.appendChild(script);
}
}
document.write
是一种做事的hackish方式,我不应该推荐它。如果你选择我的一个例子,请使用第二个。
答案 1 :(得分:0)
我有一个脚本,我写了一段时间(使用Mootools),允许一个动态包含javascript文件(加载后使用回调函数)。如果您愿意,可以修改它以使用您选择的库。
注意gvi
前缀只是我的命名空间,而gvi.scripts是一个包含页面上当前包含的所有javascript文件的数组,如果需要,可以删除它们。此外,可以删除filename
功能,这只是为了让我的生活更轻松[require('some-script')
vs require('js/some-script.js')
]。
//if dom isn't loaded, add the function to the domready queue, otherwise call it immediately
gvi.smartcall = function(fn) {
return (Browser.loaded) ? fn() : window.addEvent('domready', fn);
}
//For dynamic javascript loading
gvi.require = function(files, callback, fullpath) {
callback = callback || $empty;
fullpath = fullpath || false;
var filename = function(file) {
if (fullpath == true) return file;
file = ( file.match( /^js\/./ ) ) ? file : "js/"+file;
return ( file.match( /\.js$/ ) ? file : file+".js" );
}
var exists = function(src) {
return gvi.scripts.contains(src);
}
if ($type(files) == "string") {
var src = filename(files);
if (exists(src)) {
gvi.smartcall(callback);
} else {
new Asset.javascript( src, {
'onload' : function() {
gvi.scripts.push(src);
gvi.smartcall(callback);
}
});
}
} else {
var total = files.length, loaded = 0;
files.each(function(file) {
var src = filename(file);
if (exists(src) && loaded == total) {
gvi.smartcall(callback);
} else if (exists(src)) {
loaded++;
} else {
new Asset.javascript( src, {
'onload' : function() {
gvi.scripts.push(src);
loaded++;
if (loaded == total) gvi.smartcall(callback);
}
});
}
});
}
}
你称之为
gvi.require('my-file', function() {
doStuff();
});
//or
gvi.require(['file1', 'file2'], function() {
doStuff();
});
答案 2 :(得分:0)
jQuery有一个插件:http://plugins.jquery.com/project/include
答案 3 :(得分:0)
我们可以使用HTML中的 IFRAME 标记轻松地包含外部文件,而不是使用javascript并使我们的工作更复杂。
**
<iframe src="....../path/filename.html" width="" height="">
**
如果需要更多自定义,我们也可以使用CSS控制iframe。