2017-03-09 4 views
2

サードパーティのスクリプトをhttps://athirdpartysite.com/lib.js経由で非同期に読み込みます。サードパーティスクリプトには、ユーザーが要素をクリックしたときに呼び出す関数FSFB.fbcaller( '123abc')が含まれています。 innerHTMLを使用して#invokerを生成します。 #invokerにonclickイベントを付加する前に、関数FSFB.fbcaller( '123abc')が利用可能であることを確認するにはどうすればよいですか?外部jsの関数がonclick関数を呼び出す前に利用可能かどうかチェックしてください

あなたはこの条件を使用してテストすることができます
window.onload = function() { 
    function insertAfter(referenceNode, newNode) { 
     referenceNode.parentNode.insertBefore(newNode, 
    referenceNode.nextSibling); 
} 

ar el = document.createElement("div"); 
el.id = "invoker-container"; 
el.innerHTML = '<ul><li></li><li><div id="invoker"></div></li></ul>'; 
var afterel = document.querySelector(".master-container"); 
insertAfter(afterel, el); 
} 
+0

あなたがエラーを取得している動作するはず?もしそうなら、どのようなエラー? –

+0

チェックのタイプで答えを使用するのは、定義されていないとエラーをスローしないため、ターゲットが実際に変数ではない関数になっているので、ベストです。 –

+0

@MaherFattouh?いずれの答えも未定義のエラーを投げます。 * "変数ではない関数" * - 変数と関数は直交する概念です。変数は関数を保持できます。 – cdhowie

答えて

2

if (window.FSFB && window.FSFB.fbcaller) { 
    // Function is available 
} 
0
if(typeof FSFB == "function"){ 
    if(typeof FSFB.fbcaller == "function"){ 
    //function exist 
    } 
} 

これは

+0

'FSFB'が関数であることをどう知っていますか?それはオブジェクトである可能性があります。その場合、あなたのコードは期待どおりに動作しません。 –

+0

FSFBはjQuery.ajaxのようなグローバル関数です。たとえば、jQueryはグローバル関数で、ajaxは呼び出したい関数です。 FSFB.fbcallerの場合、グローバル関数を最初にチェックします。存在する場合は目的の関数に移動します。if条件内に入るオブジェクトです。 –

+0

http://www.w3resource.com/javascript/operators/typeof .php –

関連する問題