2017-03-09 27 views
2

我們通過https://athirdpartysite.com/lib.js異步加載第三方腳本。第三方腳本包含一個函數,FSFB.fbcaller('123abc'),當用戶點擊一個元素時,我們想要調用它。我們使用innerHTML生成#invoker。在將onclick事件附加到#invoker之前,如何確保函數FSFB.fbcaller('123abc')可用?在調用onclick函數之前檢查外部js中的函數是否可用

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,你首先檢查全局函數,如果它存在你移動到所需的函數,如果它是你想要得到的對象,如果條件 –

+0

檢查了這個http://www.w3resource.com/javascript/operators/typeof .PHP –

相關問題