JavaScript插入带有async的脚本并使用其中的函数

JavaScript insert script with async and use functions from it?

本文关键字:函数 脚本 插入 async JavaScript      更新时间:2023-09-26

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

<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. 使用requireJs或类似的东西。

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

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

您还需要使setName变量在您有权访问小部件时可以访问,而现在它没有。你应该放这样的东西:

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