我的编码如下:
<script language="javascript" src="test.js"></script>
<script language="javascript">
mp.init({
app_id : 'hd32y4328r3meh2423em',
version : '1.0'
});
</script>
在 test.js 里面这样:
var mp = {};
mp.init = function(vars) {
var obj = Object.create(vars); // create obj
console.log(obj); // all
alert(obj);
//return obj;
};
但 mp.init函数()在使用createElement加载 test.js 时无法识别,如下代码:
<script language="javascript">
// Load the JS asynchronously
(function() {
var s = document.createElement('script');
s.type = 'text/javascript'; s.src = 'mpsdk.js';
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
})();
// We have a simple cars object
mp.init({
app_id : 'hd32y4328r3meh2423em',
version : '1.0'
});
</script>
任何人都可以提供帮助吗?
答案 0 :(得分:1)
加载脚本后调用函数
试试这个 -
function() {
var s = document.createElement('script');
s.type = 'text/javascript'; s.src = 'mpsdk.js';
s.addEventListener('load', function(){
//script loaded do stuff here
// We have a simple cars object
mp.init({
app_id : 'hd32y4328r3meh2423em',
version : '1.0'
});
});
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
})();
或 在加载时使用回调函数。
var onLoadScript = function(callback) {
var s = document.createElement('script');
s.type = 'text/javascript'; s.src = 'mpsdk.js';
s.addEventListener('load',callback);//callback on load
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
};
onLoadScript(function(e){
//script loaded do stuff here
// We have a simple cars object
mp.init({
app_id : 'hd32y4328r3meh2423em',
version : '1.0'
});
};
答案 1 :(得分:0)
这是因为您正在执行代码同步,而脚本是异步加载。因此,当您调用mp.init
时,脚本尚未加载。
您必须先监听load
事件(针对IE9 +和标准浏览器)或readystatechange
事件(针对IE8-)检查readyState === "complete"
,然后调用mp.init
但我建议你使用众多AMD加载器中的一个(RequireJS,curl,...),甚至是jQuery的$.getScript
来节省所有麻烦。