Facebook Sdk被阻止:如何检测用户是否正在使用Ghostery?

deo*_*lem 1 javascript facebook google-chrome-extension facebook-graph-api angularjs

为了在Facebook Graph Api上进行调用,用户必须登录并接受我的网站上的应用程序.启用Ghostery并阻止Facebook Connect后,它无法加载sdk,我GET http://connect.facebook.net/en_US/sdk.js net::ERR_BLOCKED_BY_CLIENT在Chrome控制台中获得了很好的效果.显然它打破了这个特征.

是否有一个很好的和简单的客户端方式来检测Ghostery的阻塞,所以我可以显示一个友好的消息,要求用户将我的网站列入白名单,如果他想要完全访问这些功能?

仅供参考,我正在使用Angularjs并使用提供程序加载sdk并进行调用.这是它的样子:

function fbInit(appID) {

    (function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)){
            return;
        }
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk')); 

    window.fbAsyncInit = function() {
        FB.init({
            appId      : appID,
            cookie     : true,  
            xfbml      : true,  
            version    : 'v2.1' 
        });
    }; 
}

this.setAppID = function(appID) {
    this.appID = appID;
};

this.$get = function() {
    var appID = this.appID;
    var self = this;
    fbInit(appID);

    return {
        /* Methods */
    };
};
Run Code Online (Sandbox Code Playgroud)

abr*_*ham 5

fbAsyncInit加载JS客户端时Facebook会调用.如果在一段时间后没有运行该功能,您可以相对确定它已经失败.你可以采取的一种方法就是这样.

window.fbLoaded = false;

setTimeout(function() {
    if (!fbLoaded) {
        // show error
    }
}, 5 * 1000);

window.fbAsyncInit = function() {
    window.fbLoaded = true;
    // hide error incase client took more than 5 seconds to load
    // continue running your code as usual
}
Run Code Online (Sandbox Code Playgroud)