2017-03-09 40 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 –

相关问题