如何让新的Facebook Javascript SDK在IE8中运行?

时间:2010-06-09 04:06:53

标签: javascript json facebook internet-explorer

我把我的页面简化为最简单的事情,但它仍然无法在IE8中运行。

这是整个 html页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
<head></head>
<body>
<div id="fb-root"></div>
<fb:login-button></fb:login-button>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
  FB.init({appId: 'd663755ef4dd07c246e047ea97b44d6a', status: true, cookie: true, xfbml: true});
  FB.Event.subscribe('auth.sessionChange', function(response) {
    alert(JSON.stringify(response));
  });
  FB.getLoginStatus(function (response) { alert(JSON.stringify(response)); });
</script>
</body>
</html>

在firefox,safari和chrome(在mac上),我得到了我期望的行为:如果我没有登录Facebook,我会在页面加载时出现一个空会话对话框。当我单击“登录”按钮并登录时,我会收到第二个会话对话框。如果我登录Facebook,我会收到两个会话对话:一个来自getLoginStatus调用,另一个来自事件。

在IE8中,加载页面时没有对话框。不调用getLoginStatus回调。当我单击“登录”按钮时,我会看到一个对话框,但它有一个非常奇怪的错误:

  

无效参数

     

Facebook Connect跨域名   接收者URL   (http://static.ak.fbcdn.net/connect/xd_proxy.php#?=&cb=f3e91da434653f2&origin=http%3A%2F%2Fmysiteurl.com%2Ff210cba91f2a6d4&relation=opener&transport=flash&frame=f27aa957225164&result=xxRESULTTOKENxx)   必须有应用程序的连接   网址(http://mysiteurl.com/)为   字首。您可以配置Connect   “应用程序设置”中的URL   编辑器。

我已经清理了上面的Connect URL,但它是正确的。

该对话框确实有用户名/密码字段。如果我登录,对话框会被重定向到我的Connect URL,但是没有fb cookie,所以当然没有任何作用。

我在这里做错了什么?

更新(2010年9月10日):

这个问题并不普遍。我的网站网址中有一个端口号, 因为这是我的测试网站:http://mysiteurl.com:12345。没有端口 数字,ie8似乎没问题。随着端口号,它继续 像以前一样失败了。但是,错误消息现在更简洁:

  

无效参数

     

应用程序配置不允许使用URL

此外,这个问题特定于IE(实际上,我怀疑它是特定于闪存XD传输,但我不知道如何确认)。它适用于我尝试过的所有其他平台/浏览器对。

我仍然没有接近使用带端口号的URL进行此工作。

5 个答案:

答案 0 :(得分:1)

尝试将channelUrl param传递给您的FB.init函数,并按照以下参考链接的建议创建channel.html文件:

https://developers.facebook.com/docs/reference/javascript/

答案 1 :(得分:0)

他们真的应该发布这个。但是当你在一个随机端口上工作本地服务器时,例如8080,你必须使用127.0.0.1而不是localhost,否则它将无法在IE中工作。 还要确保facebook应用程序设置中的连接URL设置为127.0.0.1

答案 2 :(得分:0)

我一直在弄乱我的代码几个小时试图解决这个问题。我的情况有点不同,但我觉得可能是同一个问题:

任何时候我都会在FB.Event.Subscribe函数下执行命令,IE8会在触发事件实际发生变化之前执行我的整个命令(例如,当订阅'auth.login'时, cb函数将在用户输入他/她的用户名和密码之前执行。当然,我的回调函数取决于用户登录后所需的数据。

我在IE,Firefox和Chrome中测试,IE是唯一给我带来麻烦的浏览器。我也让我的测试站点在80以外的端口下运行,但我还没有尝试过特定的诊断来查明问题,尽管我很确定它与此有关。

希望这可以帮助任何有类似问题的人至少知道其他可能的问题。希望尽快找到答案或解决方法!

答案 3 :(得分:0)

如果您的问题仅在端口80以外的端口上运行您的网站时发生,那么您就得到了答案:只在端口80上运行它。这个问题/问题的变体在Facebook应用程序开发中反复出现在端口80以外的端口上运行测试或开发站点。在端口80上运行并运行它!

这并不是说您要在生产中的其他端口上运行,因此请让您的测试环境模仿生产。

您是否有合理的理由要在备用端口号上运行?实际上,在端口80上运行尽可能多的站点并不困难。

答案 4 :(得分:-1)

我在IE中遇到了同样的问题。适用于Firefox和Chrome。但后来我才明白了。

在您的Facebook应用程序设置中,在“网站”选项卡中,我确定您已填写“站点URL”,但现在您需要填写其下方的“站点域”字段,它将适用于IE。< / p>

我不知道为什么没有那个领域它仍适用于IE以外的浏览器,在Facebook的结尾没有任何意义。