我正在开发一个Facebook Connect网站。登录在Firefox,IE,Safari和Chrome上运行良好。但是当我使用Opera测试它时(使用最新版本= 11)我遇到了问题。
我到达了弹出登录表单的位置,用我的电子邮件和密码填写,然后单击登录按钮。之后,登录窗口变为空,窗口标题显示“XD Proxy”。
我正在使用Facebook Connect JavaScript SDK,并且在我的解决方案中有一些iFrame(显示在jQuery灯箱式插件“ColorBox”中)。
您是否知道Opera和Facebook Connect是否存在问题,或者我的代码中是否存在导致这种情况的问题?正如我所说,该解决方案已在所有其他主流浏览器中进行了测试,并在那里正常工作。
提前致谢!
/托马斯
PS。在开发服务器上,我在端口号8585上运行该站点。我在网上看到一些帖子说这会导致问题。
答案 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