JavaScript插入脚本与异步并使用它的功能?

时间:2013-08-20 07:45:27

标签: javascript dom

我写了一个小部件,我将其包含在这样的页面中:

<script type="text/javascript">
var _sid = '1';
  (function() {
    var se = document.createElement('script'); se.type = 'text/javascript'; se.async = true;
    se.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://') + 'dev.domain.com/widget/hello.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(se, s);
  })();  
</script>

现在我想找到一种调用hello.js中存在的函数的方法,目前看起来像这样:

var widget = function () {

    function setName(a) {
        console.log(a);
    }

    return widget;  
}();

所以我希望能够像这样调用setName:widget.setName("Andy")

...来自嵌入页面,但由于某种原因,我得到“小部件未定义。”

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

在使用widget之前,您需要知道它已加载,有多种选择:

  1. 使用requireJs或类似的东西。

  2. 在你正在加载的javascript中实现一个回调函数,说它会触发'document.onHelloIsLoaded',然后如果你想知道是否加载了hello,只需将该变量设置为一个函数即可。

  3. 创建一个循环,检查是否设置了widget变量。 setInterval(在找到窗口小部件并执行代码时取消它自己)

  4. 当你有权访问widget时,你还需要使setName变量可访问,而现在却不是。你应该这样做:

    var widget = {};
    widget.setName = function()... 
    return widget;