我正在将Facebook登录添加到我现有的asp.net应用程序中。我在登录界面添加了一个Facebook登录按钮。现在,我点击Facebook的登录按钮,在IE 9中,它会在第22行的all.js中抛出客户端异常:if(a.params)b.fbCallID=a.id;
即使在那个例外之后我看到Facebook登录屏幕并且可以登录,并且在主浏览器窗口中我得到了auth.login事件,所以我可以忍受。
但是,如果我已经登录到Facebook,我来到页面并单击Facebook登录按钮,我简单地看到空的弹出窗口,然后我得到相同的客户端异常,然后我没有得到任何事件主浏览器窗口,所以我不知道用户是否登录,因此我无法将它们重定向到另一个页面。
我尝试了channelUrl技巧,但没有帮助。
有什么建议吗?
答案 0 :(得分:2)
我发现这个黑客为我解决了这个问题;在致电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;
};
答案 1 :(得分:0)
它发生的原因(从我读过的网站和文档,相信我,我读过很多)是IE拒绝跨网站的javascript,它看到all.js越过沙盒边框。可以找到一个很好的讨论here。
有些人说adding the channel.html file works,但我们尝试了所有这些,并没有取得任何成功。 (请记住,http或https必须与发送请求的页面匹配。)
Microsoft makes reference to this same issue,他们的建议是将网站添加到受信任的网站(这没有帮助)。旧的建议(从去年开始)是将CP="HONK"
添加为您的紧凑隐私政策,但我认为该错误已得到修复,并且与cookie有关。
我们似乎发生的事情是登录实际上继续,并且回调被正确调用,但是应该在登录调用之外完成的主线程停止执行(因为错误)。因此,登录之后的任何功能都无法在登录呼叫后执行。
如果有人有办法让IE不抛出异常或为此问题创建解决方法,我很想拥有它。我将很乐意提供所需的任何信息,但样本在这里:
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.