我正在尝试创建我的第一个异步加载的javascript文件,但之后无法从对象调用函数。下面是我的示例javascript文件exampletest.js ...
(function(){
var example = {
test : function () {
alert("test function called");
}
};
window.example = example;
})();
然后我尝试使用以下代码调用此文件。
(function(doc, example) {
window.example = example;
var script = doc.createElement("script");
script.type = "text/javascript";
script.async = true;
script.src = "http://www.example.com/exampletest.js";
var scriptTag = doc.getElementsByTagName("script")[0];
scriptTag.parentNode.insertBefore(script, scriptTag);
})(document, window.example || []);
example.test();
当我运行此脚本时,我收到错误“Uncaught TypeError:Object has no method'test'”
如果我在页面加载后调用该方法,比如点击链接,就会正确调用测试方法,我会收到警报框。
我一直在寻找更好地了解这一点,但到目前为止一直没有运气。我试图更好地理解如何在没有方法“测试”的情况下调用函数。有没有办法在javascript加载后推送函数调用而不会调用调用本身,所以它保持example.test();?
答案 0 :(得分:-1)
在调用之前,只需检查该功能是否存在。
试试这个:
if (typeof example.test == function){
example.test();
}
注意:由于JavaScript是异步加载的,window.onload
将无效。
<强>更新强>
拥有async
的全部目的是加载页面而不等待脚本加载。你不能兼得。
这不起作用
<script src="exampletest.js" async ></script>
<script type="text/javascript">
example.test();
</script>
但这会起作用,因为执行等待加载文件
<script src="exampletest.js" ></script>
<script type="text/javascript">
example.test();
</script>