FacebookSDK跨域接收器问题

标签 facebook facebook-c#-sdk

嗨,有人可以帮助我吗?我无法在 Chrome 9.0 beta、Chrome 8.0 或 Firefox 3.6.13 中消除此错误消息:

“不安全的 JavaScript 尝试从 URL 为“http://myapp.dyndns-office.com/”的框架访问 URL 为“http://apps.facebook.com/myapp/”的框架。域,协议(protocol)和端口必须匹配。”

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

我的 Site.Master 页面中有此脚本,位于“ View /共享”中:


<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 存在,因为我刚刚将粘贴的 URL 复制到浏览器中。我的路径是否正确,或者是否已启动 facebook 并更改 url 等...?

我知道我主要担心的是,如果我现在不解决这个跨域问题,Safari 将根本无法运行我的应用程序。

如果有任何帮助,我们将不胜感激:-\

谢谢 罗布

<<附加评论>>

最新版本的 FacebookSDK v 4.1.1 是否有内置机制可以使这种跨域功能正常工作? SDK的开发者考虑过这个问题吗?或者我刚刚提出了 future 的功能...:-\

最佳答案

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

<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 channel 文件所在的 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 中工作: ojit_代码

关于FacebookSDK跨域接收器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4573737/

相关文章:

android - 评论时Facebook登录按钮的宽度,在手机上

javascript - 从本地主机域测试 facebook javascript 登录

java - 使用谷歌应用程序引擎中托管的java程序调用facebook api(php)

c# - FaceBook C# SDK 6.4版本中CanvasAuthorizeAttribute的替代品是什么

c# - Facebook CSharp Api 使用图形 api 获取其他用户提要,问题

java - 如何在 Facebook 受众网络插页式广告中设置点击计数器?

CSS DIV - 单击 Facebook 'Send button' 展开 div 并添加不需要的滚动条

asp.net - Facebook Credits 与 C# SDK

C# Facebook SDK 动态数据转换

asp.net - Facebook 标签身份验证