2017-02-27 19 views
1

divからスクリプトのページを読み込んだ後で、いくつかのコードをトリガーできるようにしたい。javascript関数が既に実行されているかどうか調べる

私はスクリプトにアクセスできません。なぜなら、第三者からサイトに読み込まれているからです。

第三者機能の実行後にどのように機能を起動させるのですか?

私は何かなどを行うことができるようにしたい
function threeParty(){ 
    //I have no access to this code 
    $('body').append('<div id="testDiv"></div>'); 
} 

function myFunction(){ 
    $('#testDiv').html("TEST"); 
} 

...

threePart.done(function(){ 
    myFunction(); 
}); 

または

$('#testDiv').load(function(){ 
    myFunction(); 
}); 

感謝。

+0

あなたが知っている場合* *は、あなた、が追加されているもの終了するまで、項目に追加されたHTMLが含まれているかどうかを確認し続けることができます。 –

+3

divがロードされる場所が分かれば、['MutationObserver'](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver)で何かをしようとすることができます。 –

+0

可能であれば、setIntervalまたはsetTimeoutを使用しないことをお勧めします。 – rjg132234

答えて

1

突然変異の観察者は甘いです。ここで使うことができます。基本的には、リスナーをボディに追加します。ノードが追加または削除されるたびにリスナーが報告します。それが起こったときに、ノードが追加されたかどうかを確認してください。 MDNからさらに詳しい情報:私たちは本体のみの子ノードへの変更ではなく、そのような属性への変更など、他の変更を気にオブザーバーを伝えるために、引数{childList:true}を渡さhttps://developer.mozilla.org/en-US/docs/Web/API/MutationObserver

//make the observer 
var observer = new MutationObserver(
    //callback function, it gets triggered when anything mutates 
    function (mutations) { 
     mutations.forEach(function (mutation) { 
      //see if the nodes mutated (something was appended) 
      if (mutation.type === "childList") { 
       //then the com changed. see if it has our element 
       if ($('#testDiv').length > 0) { 
        //then the div was appended. do something! 
        myFunction(); 
        //optionally, disconnect the observer if we're done listening 
        observer.disconnect(); 
       } //else, do nothing 
      } 
    }); 
}); 

//above, we made the observer. now, tell it to start observing `body`: 
observer.observe(document.getElementsByTagName('body')[0], {childList: true}); 

注意。 IEは必須ではありません人のために

+1

それは完璧に動作します!本当にありがとう。私はこのMutationObserverのものについてもっと知る必要があります。非常に便利ですね。 – rjg132234

+0

ちょうどもう1つの質問ですが、IEの下位バージョンと互換性があるこれを行う他の方法はありますか? IE9以上? – rjg132234

+0

MutationObserverのMDNが、​​MutationObserverに置き換えられて廃止されたAPIであるMutationEventsにリンクしています。通常のイベントリスナーと同じように使用します。彼らはIE9 +で動作しますが、サポートは厄介です、詳細は私が手を知らないので、試行錯誤しなければならないでしょうhttps://developer.mozilla.org/en-US/docs/Web/Guide /イベント/突然変異_イベント – chiliNUT

0

、あなたはあなたのJavaScriptで完了コードに反応するPromisesを使用することができます。

$(function() { 
 

 
    // Get info from 3rd party library (using moment.js as an example) 
 
    function momentGetFromNow() { 
 
    var m = moment(new Date(2016, 0, 1)); 
 
    var d = Date.now(); 
 

 
    return new Promise(function(resolve, reject) { 
 
     resolve(m.from(d)); 
 
    }); 
 
    } 
 

 
    // Function to update UI after 3rd party Promise resolution 
 
    function updateUI(value) { 
 
    $("#test").text(value); 
 
    } 
 

 
    // momentGetFromNow returns a Promise object that we can react to 
 
    var p = momentGetFromNow(); 
 

 
    // React to 3rd party function wrapper completion 
 
    p.then(function(result) { 
 
    updateUI(result); 
 
    }).catch(function(reason) { 
 
    console.log('moment.js call failed: ' + reason); 
 
    }); 
 

 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="test"></div>

関連する問題