我想js
动态附加几个文件。每个文件都有一个函数定义,我想将其代码保存在对象的属性中。我使用纯 JavaScript 和script
标签。但onload
事件无法正常工作。如果我只包含一个文件,一切正常。但如果超过一个,onload
就出问题了。这是我的代码,它是对象中的方法:
// My files I want to include:
one.js
function one() { alert('one') };
two.js
function two() { alert('two') };
// My code in the object
var one = null;
var two = null; // In these properties I want to save my functions
function inc(files) { // 'files' is the object {one: 'one', two: 'two'}
'one' and 'two' are names of function in my files
for (key in files) {
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
var fullPath = '/path/to/file/' + files[key] + '.js'; // /path/to/file/one.js, /path/to/file/two.js,
script.setAttribute('src', fullPath);
// And here's my eventhandler. After the script is loaded,
// names of my functions are in global scope. So, the task is:
// to take them and save in properties using setter.
script.onload = function() {
setProps(window[files[key]]); // setProp(window.one / window.two);
window[files[key]] = null; // remove them from global scope
alert(one/two); // to check if I have functions saved in properties
}
document.getElementsByTagName('head').item(0).appendChild(script);
};
};
正如我在一开始所说,如果我加载一个文件,一切都会正常工作。但是对于不止一个,onload
工作两次,但仅适用于我的第二个文件 - 带有函数'two'
定义。警报触发两次并显示'two'
. 而且我只有'two'
我的财产的功能'two'
,这是我通过参数传递的最后一个功能。并且文件被附加在 DOM 文件中。
我试图在循环<script>
之外创建标签for/in
,甚至创建了一个数组并将两个脚本中的每一个保存为该数组的单独元素,但它也无济于事 - 只有最后一个文件在onload
and 两次。
问题是什么?为什么它不适用于两个文件?有可能解决吗?