Javascript-使用createElement调用js文件时无法识别函数
我有这样的编码:Javascript-使用createElement调用js文件时无法识别函数,javascript,Javascript,我有这样的编码: <script language="javascript" src="test.js"></script> <script language="javascript"> mp.init({ app_id : 'hd32y4328r3meh2423em', version : '1.0' }); </script> 但是mp.init函数()在我使用createElement加载test.js
<script language="javascript" src="test.js"></script>
<script language="javascript">
mp.init({
app_id : 'hd32y4328r3meh2423em',
version : '1.0'
});
</script>
但是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>
//异步加载JS
(功能(){
var s=document.createElement('script');
s、 type='text/javascript';s.src='mpsdk.js';
var x=document.getElementsByTagName('script')[0];
x、 parentNode.insertBefore(s,x);
})();
//我们有一个简单的汽车对象
mp.init({
应用程序id:'hd32y4328r3meh2423em',
版本:“1.0”
});
任何人都可以提供帮助?这是因为您同步执行代码,而脚本是异步加载的。因此,当您调用
mp.init
时,脚本尚未加载
您必须监听load
事件(对于IE9+和标准浏览器)或readystatechange
事件(对于IE8-)检查readyState==“complete”
,然后调用mp.init
但是我建议您在加载脚本后使用众多AMD加载程序(RequireJS、curl等)中的一个,甚至jQuery的
$.getScript
调用函数,以省去所有的麻烦
试试这个-
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'
});
};
DOM元素插入未被阻止。脚本的其余部分将运行,然后将加载mpsdk.js。您需要等待js文件加载。在加载/评估
mpsdk.js
之前调用mp.init
。当建议编写加载程序而不是使用现有加载程序时,您可能应该提到存在各种问题,例如旧IE(低于10)
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'
});
};