我写了一个小部件,我将其包含在这样的页面中:
<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")
...来自嵌入页面,但由于某种原因,我得到“小部件未定义。”
任何想法我做错了什么?
答案 0 :(得分:1)
在使用widget之前,您需要知道它已加载,有多种选择:
使用requireJs或类似的东西。
在你正在加载的javascript中实现一个回调函数,说它会触发'document.onHelloIsLoaded',然后如果你想知道是否加载了hello,只需将该变量设置为一个函数即可。
创建一个循环,检查是否设置了widget变量。 setInterval(在找到窗口小部件并执行代码时取消它自己)
当你有权访问widget时,你还需要使setName变量可访问,而现在却不是。你应该这样做:
var widget = {};
widget.setName = function()...
return widget;