0

我正在使用 TogetherJS ( http://togetherjs.com ),我想在 DOM 准备好后动态调用它。通过 head 中的脚本标记调用它时,它可以正常工作。动态调用同一脚本时出现问题:

function loadjsfile(filename, filetype){
if (filetype=="js"){ //if filename is a external JavaScript file
    var fileref=document.createElement('script')
    fileref.setAttribute("type","text/javascript")
    fileref.setAttribute("src", filename)
}
if (typeof fileref!="undefined")
    document.getElementsByTagName("head")[0].appendChild(fileref)
}

loadjsfile("https://togetherjs.com/togetherjs-min.js", "js")

这些功能不起作用:

TogetherJS.hub.on('init', function (msg) {
    console.log("init");
});

TogetherJS.on("ready", function () {
    console.log("ready");
});

我得到“ TogetherJS 未定义”。

我能做些什么?

编辑:实际上我想在广场(http://galleria.io)准备好之后加载它,所以我这样称呼它:

Galleria.ready(function(){
   loadjsfile("https://togetherjs.com/togetherjs-min.js", "js");
})

Edit2:在文档togetherjs.com/docs/#extending-togetherjs
中找到“延迟初始化”部分。我只是不知道如何替换这一行:

MyApp.onload = callback;

我需要 Galleria's.ready 事件而不是 MyApp.onload 。

4

1 回答 1

1

将脚本节点添加到 DOM 并不能确保在执行后续代码之前文件已完成加载和解析。基本上,您是在尝试从 TogetherJS 中执行属性,然后再创建它们。

只是延迟执行,直到页面加载。

function loadjsfile(filename, filetype){

    if (filetype=="js"){ //if filename is a external JavaScript file
        var fileref=document.createElement('script');
        fileref.setAttribute("type","text/javascript");
        fileref.setAttribute("src", filename);
    }
    if (typeof fileref!="undefined")
        document.getElementsByTagName("head")[0].appendChild(fileref);
        //call TogetherJS methods after script has loaded
        fileref.onload = function() {
            TogetherJS.hub.on('init', function (msg) {
                console.log("init");
            });

            TogetherJS.on("ready", function () {
                console.log("ready");
            });
        };
    }
}

loadjsfile("https://togetherjs.com/togetherjs-min.js", "js");
于 2015-05-18T02:13:17.570 回答