2011-09-08 79 views
7

我正在将Facebook登录添加到我现有的asp.net应用程序中。我在登录屏幕上添加了Facebook登录按钮。现在,我点击Facebook的登录按钮,并在IE 9它抛出客户端异常在第22行all.js:if(a.params)b.fbCallID=a.id;Facebook登录抛出“Permission denied”

即使在此异常后,我看到Facebook登录屏幕,并可以登录,并在主浏览器窗口我得到了auth.login事件,所以我可以忍受这一点。

但是,如果我已经登录到Facebook,我来到页面并点击Facebook登录按钮,我简要地看到空的弹出窗口,然后我得到相同的客户端异常,然后我没有得到任何事件在主浏览器窗口中,所以我不知道用户是否登录,因此我无法将它们重定向到其他页面。

我试过了channelUrl技巧,但没有帮助。

有什么建议发生了什么?

+0

[在all.js权限被拒绝错误(可能重复http://facebook.stackoverflow.com/questions/7280007/permission-denied-error-in- all-js) –

回答

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; 
          }; 
0

它发生的原因(从我已阅读的网站和文档中,相信我,我已经阅读了很多)是IE拒绝跨站点JavaScript,它将all.js视为穿越沙盒边境。一个很好的讨论可以发现here

有人说adding the channel.html file works,但我们尝试了所有的口味,并没有取得任何成功。 (请记住,http或https必须与发送请求的页面匹配。)

微软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. 
+0

当你引用“主线程”时你是什么意思? JS是单线程的,如果它遇到了某个错误,它可能会停止执行代码。 – Andrey

+0

其实,我觉得我可能会到的东西 - 我现在只用onlogin Facebook登录按钮的情况下,它似乎当用户对FB和何时不已经登录这两种情况下工作正常。我仍然得到“权限被拒绝”例外,但它不会停止功能。一旦测试完成,我会在这里发布解决方案,并确保它正常工作。 – Andrey

+0

Javascript并不是多线程的,但回调在某些方面模仿多线程。我称之为“主线程”(执行FB.Login调用之后)的执行被暂停,但回调运行完成。我不知道为什么,但我们已经通过代码中的警报验证了这一点。 – MontyThreeCard

相关问题