0

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

<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")

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

任何想法我做错了什么?

4

1 回答 1

1

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

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

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

  3. 做一个循环,检查是否设置了小部件变量。setInterval (当发现小部件并且代码已经执行时它会自行取消)

当您可以访问小部件时,您还需要使 setName 变量可访问,而现在它不是。你应该这样写:

var widget = {};
widget.setName = function()... 
return widget;
于 2013-08-20T07:56:22.513 回答