2011-09-08 18 views
7

Dodaję login Facebooka do mojej istniejącej aplikacji asp.net. Dodałem przycisk logowania na Facebooku do mojego ekranu logowania. Teraz klikam przycisk logowania na Facebooku, aw IE 9 generuje wyjątek od strony klienta w all.js na linii 22: if(a.params)b.fbCallID=a.id;Facebook Logowanie wyrzuca "Zezwolenie zabronione"

Nawet po tym wyjątku widzę ekran logowania na Facebooku i mogę się zalogować, a także w głównej przeglądarce window Otrzymuję zdarzenie auth.login, więc mogę z tym żyć.

Ale jeśli jestem już zalogowany na Facebooku, wchodzę na stronę i klikam przycisk logowania do Facebooka, krótko widzę puste okno wyskakujące, a następnie pojawia się ten sam wyjątek od strony klienta, a następnie nie otrzymuję żadnego zdarzenia w głównym oknie przeglądarki, więc nie wiem, czy użytkownik się zalogował, więc nie mogę przekierować ich na inną stronę.

Próbowałem sztuczki channelUrl, ale to nie pomogło.

Jakieś sugestie co się dzieje?

+0

możliwe duplikat [Permission denied błędu w all.js] (http://facebook.stackoverflow.com/questions/7280007/permission-denied-error-in- all-js) –

Odpowiedz

2

Znalazłem ten siekać, że Naprawiono problem dla mnie; dodać ten wiersz tuż po wywołaniu FB.init():

// Hack to fix http://bugs.developers.facebook.net/show_bug.cgi?id=20168 for IE7/8/9 
FB.UIServer.setLoadedNode = function (a, b) { 
           FB.UIServer._loadedNodes[a.id] = b; 
          }; 
0

Dzieje się tak dlatego (ze stron internetowych i dokumentów, które przeczytałem, i uwierzcie, przeczytałem DUŻO), że IE odmawia stosowania javascript między lokacjami i widzi all.js jako przekraczanie piaskownicy granica. Dobra dyskusja można znaleźć here.

Niektórzy ludzie mówią, że adding the channel.html file works, ale wypróbowaliśmy wszystkie smaki tego i nie odniosły żadnego sukcesu. (Pamiętaj, że http lub https muszą być zgodne ze stroną wysyłającą żądanie).

Microsoft makes reference to this same issue i ich porady to dodanie witryny do zaufanych witryn (to nie pomaga). Stara rada (z zeszłego roku) polega na dodaniu CP="HONK" jako swojej zwartej polityki prywatności, ale uważam, że błąd został naprawiony i był związany z plikami cookie.

To, co wydaje się nam dziać, to fakt, że logowanie w rzeczywistości trwa, a wywołanie zwrotne zostanie poprawnie wywołane, ale główny wątek, który powinien zakończyć się poza wywołaniem logowania, przestanie być wykonywany (z powodu błędu). Tak więc, wszelkie funkcje poza loginem nie zostaną wykonane po zalogowaniu się.

Jeśli ktoś ma sposób, aby IE nie wyrzucił wyjątku lub utworzył obejście tego problemu, jestem zdesperowany, aby to zrobić. Wszelkie informacje potrzebne będę szczęśliwy, aby zapewnić, ale próbka jest tutaj:

enter code here 
code before login here... 
FB.login(function(response){ 
    callback stuff here... This part fires. 
}); 
main thread stuff here... This fails because of permission denied error. 
+0

Co masz na myśli mówiąc o "głównym wątku"? JS jest jednowątkowe i może przestać wykonywać kod, jeśli wystąpi określony błąd. – Andrey

+0

Właściwie, myślę, że mogę być na czymś - Używam teraz tylko zdarzenia onlogin przycisku logowania na Facebooku i wydaje się, że działa dobrze dla obu przypadków, gdy użytkownik jest już zalogowany do FB, a kiedy nie. Nadal dostaję wyjątek "Odmowa uprawnień", ale to nie zatrzymuje funkcjonalności. Opublikuję rozwiązanie tutaj po przetestowaniu i upewniam się, że działa. – Andrey

+0

Javascript nie jest wielowątkowy jako taki, ale wywołania zwrotne naśladują wielowątkowość w pewien sposób. Wykonanie tego, co nazywam "głównym wątkiem" (co przychodzi po wywołaniu FB.Login) jest zatrzymywane, ale wywołanie zwrotne jest kończone. Nie jestem pewien dlaczego, ale zweryfikowaliśmy to za pomocą alertów w kodzie. – MontyThreeCard

Powiązane problemy