javascript - Facebook SDK 被阻止 : How to detect if a user is using Ghostery?

标签 javascript facebook angularjs facebook-graph-api google-chrome-extension

为了在 Facebook Graph Api 上进行调用,用户必须在我的网站上登录并接受我的申请。在启用 Ghostery 并阻止 Facebook Connect 的情况下,它无法加载 sdk,我在我的 Chrome 中得到了一个不错的 GET http://connect.facebook.net/en_US/sdk.js net::ERR_BLOCKED_BY_CLIENT安慰。显然它破坏了该功能。

是否有一种简单易用的客户端方法来检测 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 */
    };
};

最佳答案

Facebook 在加载 JS 客户端时调用 fbAsyncInit。如果该函数在一定时间后没有运行,您可以相对确定它失败了。您可以采取的一种方法是这样的。

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
}

关于javascript - Facebook SDK 被阻止 : How to detect if a user is using Ghostery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26504061/

相关文章:

javascript - Object.create vs new 在原型(prototype)继承方面

.net - 可扩展 Facebook 游戏的服务器架构

javascript - 扩展空对象以在事件发出时填充它 angularJS

angularjs - Angular.js : Using ng-model for dropdowns within ng-repeat

javascript - Vue.js 在挂载和重新启动功能中运行代码

javascript - setTimeout 导致无限 while 循环

javascript - Reactjs 组件之间的通信

jquery - 有 jQuery TextboxList 吗?

iphone - 使用 SocialFramework 登录 Facebook

javascript - Karma jasmine 和 Angular Controller 使用 'Controller as' 语法(这而不是 $scope)