调用FB.login以获取权限会在IE中引发错误

时间:2011-09-28 14:42:03

标签: javascript facebook facebook-javascript-sdk

我正在调用 canvas

FB.login(function(){}, {
  scope:'publish_stream'
});

在Firefox和Chrome上显示带有权限对话框的弹出窗口。但在IE上有错误(见附件。):

  

my_app_name发生错误。请稍后再试。

enter image description here

我的FB.init

FB.init({
        appId:  <FB_APP_ID>,
        status: true,
        cookie: true,
        xfbml:  true,
        oauth:  true,
        hideFlashCallback: function(){}
    });

早些时候(在oauth之前)我正在使用下面的代码,没关系,但它不能用于oauth:

FB.ui({
    method: 'permissions.request',
    perms:  'publish_stream',
}, function(){});

编辑

来自访问令牌的信息: enter image description here

edit2:

如果您找到解决方案,请写下答案 - 如果有效,我会从您的声誉中给您100分。

7 个答案:

答案 0 :(得分:4)

要使其在IE中运行,您应该使用完全限定的url将channelUrl param添加到FB.init。例如:

FB.init({
    appId:  <FB_APP_ID>,
    status: true,
    cookie: true,
    xfbml:  true,
    channelUrl: 'http://www.example.com/facebook-channel.html'
});

网址必须指向仅包含一个脚本标记的网页:

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

如果你只是写

,那么使channelUrl成为一个绝对的人是很重要的
channelUrl: '/facebook-channel.html'

它不会工作。我对此感到很头疼,所以我希望它对你或任何像我之前一样困扰它的人都有所帮助。

答案 1 :(得分:1)

尝试将_inCanvas切换到true,看看会发生什么

FB._inCanvas = true;

答案 2 :(得分:1)

我过去也遇到过这个问题。您可能在一个域上打开它,该域与在应用程序设置页面上指定为您的站点域的域不同。

答案 3 :(得分:1)

如果您已选择使用

  

沙箱

在developers.facebook.com/apps。

您应该将其更改为不使用。

答案 4 :(得分:0)

现在你在https上运行,你需要通过https引用所有的声明。 IE现在将显示一连串警告,告诉用户并非所有内容都通过安全连接发送。这可能就是弹出窗口失败的原因。设置SDK以通过HTTPS加载内容:

      FB._https = true;
      FB.init({
       /* your app id and stuff */
     });

答案 5 :(得分:0)

也许是因为IE没有设置第三方Cookie?

尝试添加

标题('P3P:CP = HONK');

进入php文件后,必须在输出文件中的任何内容之前使用标题函数。

答案 6 :(得分:0)

我为此做了一些解决方法。我正在用以下网址打开新窗口:

https://www.facebook.com/dialog/oauth?client_id=APPID&scope=publish_stream&redirect_uri=MYPAGE

当MYPAGE(在我的应用程序网址中)加载时,它只是自行关闭。


如果您找到解决方案,请写下答案 - 如果有效,我会从您的声誉中给您100分。