Facebook تسجيل الدخول معلقة في "XD الوكيل" عندما الصفحة المثبتة عبر كروم ويب ستور

StackOverflow https://stackoverflow.com/questions/7368805

سؤال

خلق التالية تطبيق ويب:

http://www.web-allbum.com/

أود أيضا أن أضيف إلى سوق Chrome الإلكتروني:

https://chrome.google.com/webstore/detail/idalgghcnjhmnbgbeebpdolhgdpbcplf

المشكلة هي أنه عندما تذهب إلى متجر على شبكة الإنترنت كروم وتثبيت هذا التطبيق Facebook تسجيل الدخول ويندوز توقف في "XD الوكيل" نافذة.في حين ربط نفسه يعمل هذا إطار فارغ لا يمكن الخلط بين المستخدمين.

فعلت بحثي هذا يبدو أن قضية الكروم:https://code.google.com/p/chromium/issues/detail?id=59285#c26

إذا قمت بإلغاء تثبيت التطبيق من الكروم, يختفي المشكلة.

هل هناك أي حل لهذه المشكلة ؟

مماثلة ستاكوفيرفلوو الأسئلة:

هذا هو بلدي Facebook connect في حالة أنه يساعد على:

    FB.init({
        appId  : window.__FACEBOOK_APP_ID__,
        status : true, // check login status
        cookie : true, // enable cookies to allow the server to access the session
        xfbml  : true, // parse XFBML
        channelUrl : window.__MEDIA_URL__ + 'channel.html', // channel.html file
        oauth  : true // enable OAuth 2.0
    });


    FB.XD.Flash.init();
    FB.XD._transport = "flash";

    if (A.networks.facebook.connected) {
        FB.getLoginStatus(function (response) {
            // Stores the current user ID for later use
            that.network_id = response.authResponse.userID;

            if (!response.authResponse) {
                // no user session available, someone you dont know
                A.networks.facebook.connected = false;
            }
            callback();
        });
    }
    else {
        callback();
    }
}; 

الحل

بفضل reekogi الرد كنت قادرة على حل هذه المسألة.هنا هو التنفيذ الكامل:

من أجل تجنب XD الوكيل المشكلة يجب connecte على Facebook بدون استخدام الفيس بوك.تسجيل الدخول, ويمكن تحقيق ذلك من خلال يدويا إعادة توجيه المستخدم إلى Facebook الصفحة.

كان هذا الدخول وظيفة في قانون بلدي:

_facebook.connect_to_network = function (callback) {
    FB.login(function (response) {
        if (response.authResponse) {
            console.log('Welcome!  Fetching your information.... ');
            FB.api('/me', function (response) {
                // Stores the current user Id for later use
                that.network_id = response.id;
                console.log('Good to see you, ' + response.name + '.');
                callback();
            });
        }
        else {
            console.log('User cancelled login or did not fully authorize.');
            that.connected = false;
            callback();
        }

    }, {scope: window.__FACEBOOK_PERMS__});
};

التي استبدلت بموجب هذا القانون:

_facebook.connect_to_network = function (callback) {
    var url = 'https://www.facebook.com/connect/uiserver.php?app_id=' + window.__FACEBOOK_APP_ID__ + '&method=permissions.request&display=page&next=' + encodeURIComponent(window.__BASE_URL__ + 'authorize-window?my_app=facebook&my_method=login') + '&response_type=token&fbconnect=1&perms=' + window.__FACEBOOK_PERMS__;

    window.open(url);
};

القانون الجديد يفتح المنبثقة الذي يربط Facebook و يعود إلى url المحدد في 'التالي' المعلمة.أضفت بعض معلمات إضافية في هذا الاستدعاء url بحيث شفرة جافا سكريبت يمكن أن تحقق ذلك و إغلاق النوافذ المنبثقة.

يتم تنفيذ هذا الرمز عندما Facebook الموجهات إلى رد url:

_facebook.parse_url_params = function () {
    // This is the popup window
    if (URL_PARAMS.my_method === 'login') {
        window.opener.A.networks.facebook.connected = true;
        self.close();
    }
};

URL_PARAMS هو مجرد كائن مساعد الذي يحتوي على جميع معلمات عنوان url.

ما زلت أعتقد أن هذا هو كروم المسألة ، ولكن منذ هذا الحل عملت و حل مشكلتي أنا بمناسبة هذا السؤال حلها.

هل كانت مفيدة؟

المحلول

يمكن أن تتصل توجيه جافا سكريبت للحصول على أذونات ثم إعادة توجيه إلى http://www.web-allbum.com/connected أوري?

وصفت هذه الطريقة بالتفصيل هنا -- > الأذونات على صفحة المعجبين

تحرير:

الطريقة أثبتت قبل أن تكون مستنكر عند أوث 2.0 يأتي في المتطلبات.

هنا هو رمز ، وتكييفها OAauth 2.0 (response.session يتم استبدال response.authResponse)

<div id="fb-root"></div>
<script>
theAppId = "YOURAPPID";
redirectUri = "YOURREDIRECTURI"; //This is the page that you redirect to after the user accepts the permissions dialogue

//Connect to JS SDK
FB.init({
    appId  : theAppId,
    cookie: true, 
    xfbml: true, 
    status: true,
    channelURL : 'http://yourdomain.co.uk/channel.html', // channel.html file
    oauth  : true // enable OAuth 2.0
});

//Append to JS SDK to div.fb-root
(function() {
    var e = document.createElement('script');
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
    e.async = true;
    document.getElementById('fb-root').appendChild(e);
}());

//Check login status and permissions
FB.getLoginStatus(function(response) {
  if (response.authResponse) {
    // logged in and connected user, someone you know
  } else {
    //Redirect to permissions dialogue
    top.location="https://www.facebook.com/connect/uiserver.php?app_id=" + theAppId + "&method=permissions.request&display=page&next=" + redirectUri + "&response_type=token&fbconnect=1&perms=email,read_stream,publish_stream,offline_access";
  }
});

</script>

فقط مجربة, عملت بشكل جيد في كروم.

نصائح أخرى

أنا لم أحاول الحل المقترح من قبل سيزار, لأنني أفضل أن العصا مع Facebook الرسمي جافا سكريبت SDK.

ومع ذلك أود أن أضيف بعض الملاحظات:

  • والواقع أن مشكلة حظر حدث فقط على الكروم بعد تثبيت البرنامج من سوق Chrome الإلكتروني.إلغاء تثبيت التطبيق على شبكة الإنترنت يحل المشكلة.(اختبار مع إرث طريقة التوثيق دون oauth 2.0).بعد إغلاق XD الوكيل المنبثقة يدويا ، كان التطبيق يعمل بشكل صحيح.

  • بعد التحول إلى غير متزامن FB.init() وتمكين oauth 2.0 الخيار طلبي لن تحصل حتى على صالح facebook حالة الاتصال في وقت تسجيل الدخول ({authResponse: null, status: "unknown"})...مرة أخرى, إزالة من سوق Chrome الإلكتروني ، انها تعمل... ({authResponse: Object, status: "connected"})

  • لا مشكلة واجهتها مع سفاري في أي من هذه الحالات.

في IE8 - وهذا يمكن أن يكون بسبب نسخة فلاش.لقد جربت كل شيء و لا شيء يعمل حتى أنا تعطيل فلاش.مزيد من التفاصيل من هذه المدونة:http://hustoknow.بلوغسبوت.com/2011/06/كيف facebooks-xdproxyphp-يبدو أن يكون.html#comment-form

فتح علامة تبويب جديدة في المتصفح فى كروم و انظر إذا كان لديك Facebook 'التطبيق' المثبتة.إذا كان الأمر كذلك ، اسحب إلى أسفل الزاوية اليمنى إلى إلغاء.بمجرد تثبيت XD وكيل العمل.

المرجع: facebook connect فارغة يطفو على كروم

لقد كانت تعاني من نفس المشكلة على جميع المتصفحات.عندما يقوم المستخدم بالنقر فوق زر "تسجيل الدخول" ، المنبثقة فتح شنق;و ما لم يكن المستخدم قتل المتصفح العملية تسببت في ارتفاع الحمل على وحدة المعالجة المركزية.إذا كان المستخدم تمكنت من رؤية زر "السماح" و فوق ذلك, ثم ظهرت "xd الوكيل" إطار فارغ ولم يحدث شيء.كانت تلك المشكلة.

بعد فترة طويلة من التحقيقات ، لاحظت بلدي جديد JS التعليمات البرمجية التي الوكلاء setInterval/clearInterval/setTimeout/clearTimeout أساليب تسبب هذه المشكلة.التعليمات البرمجية كما يلي:

window.timeoutList = new Array();
window.intervalList = new Array();

window.oldSetTimeout = window.setTimeout;
window.oldSetInterval = window.setInterval;
window.oldClearTimeout = window.clearTimeout;
window.oldClearInterval = window.clearInterval;

window.setTimeout = function(code, delay) {
    window.timeoutList.push(window.oldSetTimeout(code, delay));
};
window.clearTimeout = function(id) {
    var ind = window.timeoutList.indexOf(id);
    if(ind >= 0) {
        window.timeoutList.splice(ind, 1);
    }
    window.oldClearTimeout(id);
};
window.setInterval = function(code, delay) {
    window.intervalList.push(window.oldSetInterval(code, delay));
};
window.clearInterval = function(id) {
    var ind = window.intervalList.indexOf(id);
    if(ind >= 0) {
        window.intervalList.splice(ind, 1);
    }
    window.oldClearInterval(id);
};
window.clearAllTimeouts = function() {
    for(var i in window.timeoutList) {
        window.oldClearTimeout(window.timeoutList[i]);
    }
    window.timeoutList = new Array();
};
window.clearAllIntervals = function() {
    for(var i in window.intervalList) {
        window.oldClearInterval(window.intervalList[i]);
    }
    window.intervalList = new Array();
};

إزالة هذه الخطوط حل مشكلتي.ربما يساعد على الذي يواجه نفس.

ويبدو أن هذا قد تم إصلاحها في كروم.لم يعد يحدث لنا في ماك كروم 15.0.874.106

الحل آخر هو استخدام هذا الرمز بعد المكالمة FB.init():

if (/chrome/.test(navigator.userAgent.toLowerCase())) {
    FB.XD._origin = window.location.protocol + '//' + document.domain + '/' + FB.guid();
    FB.XD.Flash.init();
    FB.XD._transport = 'flash';
}

النافذة المنبثقة لا تزال مفتوحة وفارغة ، ولكن وجدت أن في كروم ويب ستور التطبيق المصادقة يمر عندما يستخدم هذا الرمز.

هذا هو علة أيضا رفعها على Facebook المطورين هنا: http://developers.facebook.com/bugs/278247488872084

لقد كنت تعاني من نفس المشكلة في IE9 ، ويبدو أن تنبع من الترقية إلى فلاش لاعب 10.الأجوبة المقترحة بالفعل لم يكن العمل بالنسبة لي كنت قد فقدت الأمل في محاولة إصلاحه منذ العثور على فتح علة في Facebook تغطي ذلك.ولكن هنسون وقد نشرت جوابا على سؤال مشابه أن إصلاح ذلك بالنسبة لي.في جافا سكريبت في موقعي الرئيسي أزلت خطوط

    FB.UIServer.setLoadedNode = function (a, b) {
       //HACK: http://bugs.developers.facebook.net/show_bug.cgi?id=20168
        FB.UIServer._loadedNodes[a.id] = b;
    };

و الآن يعمل.(N. B.لم يتم التحقق لمعرفة ما إذا كان IE8 المسألة هذه الخطوط كانت تهدف إلى التغلب على العوائد.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top