使用JavaScript SDK登录Facebook Connect在Opera中冻结?

时间:2011-01-07 15:45:47

标签: login facebook opera

我正在开发一个Facebook Connect网站。登录在Firefox,IE,Safari和Chrome上运行良好。但是当我使用Opera测试它时(使用最新版本= 11)我遇到了问题。

我到达了弹出登录表单的位置,用我的电子邮件和密码填写,然后单击登录按钮。之后,登录窗口变为空,窗口标题显示“XD Proxy”。

我正在使用Facebook Connect JavaScript SDK,并且在我的解决方案中有一些iFrame(显示在jQuery灯箱式插件“ColorBox”中)。

您是否知道Opera和Facebook Connect是否存在问题,或者我的代码中是否存在导致这种情况的问题?正如我所说,该解决方案已在所有其他主流浏览器中进行了测试,并在那里正常工作。

提前致谢!

/托马斯

PS。在开发服务器上,我在端口号8585上运行该站点。我在网上看到一些帖子说这会导致问题。

4 个答案:

答案 0 :(得分:5)

Facebook连接目前失败,因为Facebook的脚本通过检查是否支持attachEvent方法来“检测”Internet Explorer。不幸的是,Opera支持这种方法(历史上与其他需要它的站点兼容)。现在,如果他们只这样做:https://github.com/facebook/connect-js/pull/240 ..

这种破坏的伪浏览器检测导致了这个问题,因为Facebook碰巧使用了Opera不支持的一些IE代码,用于在基于Flash的部分脚本中嵌入Flash进行跨文档消息传递,而备用window.postMessage ()脚本的一部分还有其他问题,如下所述:http://my.opera.com/hallvors/blog/2010/07/20/postmessage-s-targetorigin-and-security

答案 1 :(得分:1)

我找到了似乎有效的解决方案!如果我将一个channelUrl选项添加到FB.init,我可以登录。我收到Opera的警告说:

  

警告   http://www.yourdomain.com/channel.html?fb_xd_fragment

     

公共互联网上的页面请求   来自您的私人内部网的数据。对于   安全原因,自动访问是   被阻止,但你可以选择   继续。

     

链接:继续

     

LINK:数据时始终继续   从我的服务器请求   私人内联网

我点击了“继续”链接,然后就可以了(在此会话期间)。原始的FB.init行看起来像这样(在这个例子中appId和其他一些东西已被替换):

// Facebook init
FB.init({ appId: '123456789', status: true, cookie: true, xfbml: true });

添加channelUrl后,它看起来像这样:

// Facebook init
FB.init({ appId: '123456789', status: true, cookie: true, xfbml: true, channelUrl: "http://www.yourdomain.com/channel.html" });

文件“channel.html”是一个简单的文件,只包含以下代码行:

<script src="http://connect.facebook.net/en_EN/all.js"></script>

创建它并将其放在您在channelUrl中指定的位置的服务器上。服务器根目录是个好地方。

如果可能的话,下一步是弄清楚如何摆脱Opera警告?

祝你好运!

/ Thomas Kahn

答案 2 :(得分:1)

要在Opera中修复它,只需在FB.init()之后添加以下内容:

if($.browser.opera ) // it uses jQuery library here!
{
   FB.XD._transport="postmessage";
   FB.XD.PostMessage.init();
}

答案 3 :(得分:1)

此channel.html对我不起作用

<script src="http://connect.facebook.net/en_EN/all.js"></script>

但是当我把它改为:

<script src="http://connect.facebook.net/en_GB/all.js"></script>

它有效。在此网址中,无效内容http://connect.facebook.net/en_EN/all.js会转到此http://connect.facebook.net/en_GB/all.js