FacebookSDK跨域接收器问题

时间:2011-01-01 10:08:05

标签: facebook facebook-c#-sdk

你可以帮助我。我无法在Chrome 9.0 beta,Chrome 8.0或Firefox 3.6.13中删除此错误消息:

“不安全的JavaScript尝试使用URL”http://appapp.dyndns-office.com/“从具有URL”http://apps.facebook.com/myapp/“的框架访问框架。域名,协议和端口必须匹配。“

我在Samples文件夹中使用了FacebookSDK版本4.1.1 CSMvcFacebookApp。

我的Site.Master页面位于Views / Shared:


<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        FB_RequireFeatures(['CanvasUtil'], function () {
            FB.XdComm.Server.init("<%= ResolveUrl("~/xd_receiver.htm") %>");
            FB.CanvasClient.startTimerToSizeToContent();
        });
    });
</script>

我的根目录中有xd_receiver.htm,并假设上面的javascript代码是我需要用facebook验证我的域名。 我的推定是正确的还是改变了? 我甚至尝试将FB代码移出JQuery就绪函数,如下所示:


<script language="javascript" type="text/javascript">
    FB_RequireFeatures(['CanvasUtil'], function () {
        FB.XdComm.Server.init("<%= ResolveUrl("~/xd_receiver.htm") %>");
        FB.CanvasClient.startTimerToSizeToContent();
    });
</script>

但这也不起作用...... 任何人都可以了解我做错了什么,或者我如何使用SDK / MVC IFrame解决方案让xd文件工作......

FB.CanvasClient.startTimerToSizeToContent()正在触发,因为我的应用程序中没有滚动条,因此证明FB_RequireFeatures函数正在工作。但至于FB.XdComm.Server.init是否正在做它的部分,我只是不确定我如何测试这个?

我的根目录中的xd_receiver.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" >
<head>
    <title>cross domain receiver page</title>
</head>
<body>
        <!--
                As described in: http://wiki.developers.facebook.com/index.php/Cross-domain_communication_channel
        -->
    <script src="http://static.ak.facebook.com/js/api_lib/v0.4/XdCommReceiver.js" type="text/javascript"></script>

</body>
</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" >
<body>
<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/XdCommReceiver.js" type="text/javascript"></script>
</body>
</html>

XdCommReceiver.js存在,因为我刚刚将粘贴的网址复制到浏览器中。我的路径是正确的还是有Facebook并更​​改网址等等??

据我所知,我主要担心的是,如果我现在没有解决这个跨领域的问题,Safari根本不会运行我的应用程序。

非常感谢任何帮助: - \

由于 罗布

&LT;&LT;附加评论&gt;&gt;

最新版本的FacebookSDK v 4.1.1中是否有内置机制使这个跨域的东西正常工作? SDK的开发人员是否考虑过这个问题?或者我刚刚提出了未来的功能......: - \

2 个答案:

答案 0 :(得分:3)

以下是跨域脚本通道文件中需要的代码:

<html><body><script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script></body></html>

这是初始化FB Javascript SDK的代码。将它放在HTML文件的最末端,替换为适当的值和URL。

<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script><script type="text/javascript">FB.init({appId: '1234567890', status: true, cookie: true, xfbml: true,channelUrl: 'http://example.com/xss_channel.htm'});</script>

(可选)将其放在XSS通道文件所在的web.config中。这使得浏览器可以按照Facebook的建议无限期地缓存文件。

  <?xml version="1.0" encoding="UTF-8"?>
  <configuration>
      <location path="xss_channel.htm">
          <system.webServer>
              <httpProtocol>
                  <customHeaders>
                      <add name="Expires" value="Tue, 01 Jan 2030 16:00:00 GMT" />
                  </customHeaders>
              </httpProtocol>
          </system.webServer>
      </location>
  </configuration>

最后,如果您正在使用XFBML,请将此命名空间定义放在<html>中,以使XFBML在IE中工作: xmlns:fb="http://www.facebook.com/2008/fbml"

答案 1 :(得分:0)

您正在使用旧的Facebook Connect Javascript。 Facebook C#SDK与旧的Javascript SDK不兼容。您应该使用新的Facebook Javascript SDK(如示例中所示)。 http://developers.facebook.com/docs/reference/javascript/