0

私は TogetherJS ( http://togetherjs.com ) を使用しており、DOM の準備ができたら動的に呼び出したいと考えています。head 内の script タグを介して呼び出すと、正しく動作します。同じスクリプトを動的に呼び出すと、問題が発生します。

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 : docs togetherjs.com/docs/#extending-togetherjs
の「Deferring Initialization」セクションを見つけました。この行を置き換える方法がわかりません:

MyApp.onload = callback;

MyApp.onload の代わりに Galleria's.ready イベントが必要です。

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 に答える