【问题标题】:Facebook Using code from different domainsFacebook 使用来自不同域的代码
【发布时间】:2012-04-23 19:23:31
【问题描述】:

我正在用 js 创建一个小部件,它将在许多网站上实现,
Facebook 要求我向他们提供“我的域名”,以便他们知道我已通过验证。
问题是该小部件将被许多网站使用,我不会将所有这些域手动列出到 Facebook。
如何使我的应用程序仅使用 js 在那些不同的网站上运行? (用于小部件)

提前致谢。

【问题讨论】:

    标签: facebook cross-domain facebook-apps facebook-app-requests


    【解决方案1】:

    您的小部件可能需要在托管在您自己的域上的 iFrame 中加载其 FB 代码。然后,您需要使用一些跨域/跨 iframe JS hack 来让您的系统与使用它的页面进行通信。 (这是一个很好的资源……http://softwareas.com/cross-domain-communication-with-iframes)这绝对是一种痛苦,但这是我能想到的唯一方法来做你想做的事情。目前可能有一些很好的 JS 库可以让这更容易,但我没有立即意识到。

    另一种选择是创建一堆 Facebook 应用程序,每个应用程序都属于不同的域。这也会在维护方面带来一些痛苦,但它会简化您需要编写的 JS 代码。这种方法在稳健性方面有一些好处——如果使用您的小部件的网站之一出现恶意并因任何原因被禁止应用程序,您的其他客户端网站将不会受到影响。

    Facebook之前提供了一个“克隆应用”的工具,但是现在找不到了。

    【讨论】:

    • iframe 是使用 javascript sdk 的唯一方法。
    • 这是最好的方法吗? 'sharethis' 工具如何让用户能够只添加一个 js 并打开所有共享方法?他们也使用 iframe 吗?另外,我要在这些 iframe 之间传递什么?访问令牌? cookie 名称/值?
    • Facebook 的 JS SDK 大量使用 iframe。网站加载的 Facebook 脚本会创建指向 Facebook.com 的 iframe。您需要在帧之间传递的内容取决于您的应用程序的性质。关键是您需要从与应用程序关联的域中启动 Facebook 身份验证内容。
    • @NathanLabenz 但这不是安全问题吗?人们可以复制和操作他们自己的 iframe,然后通过我的应用程序做事......
    【解决方案2】:

    我使用 ajax 来做类似的事情。我 ajax 到一个 php 页面,并使用 php sdk 处理所有请求。跨域就好了。

    示例:应请求在 facebook 上更新的最新专辑,并在 facebook 上显示链接到该专辑的封面照片。

    <div id="pagealbums"></div>
    <script>
    function showAlbums(){
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttpA=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttpA=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttpA.onreadystatechange=function()
      {
      if (xmlhttpA.readyState==4 && xmlhttpA.status==200)
        {
        document.getElementById("pagealbums").innerHTML=xmlhttpA.responseText;
        }
      };
      xmlhttpA.open("GET","http://anotherfeed.com/feed.albums.php?pageid=facebook&type=list",true);
      xmlhttpA.send(); 
    }
    showAlbums();
    </script>
    

    【讨论】:

    • 但是我会将这个“小部件”分发给我无法信任拥有我的私钥的人......另外,我只想要一个 js 解决方案,而这里的 ajax 需要一个用于客户端的 php 文件(或者您打算使用 CORS)。
    • 使用此方法我可以控制谁可以使用我的插件,并且所有身份验证都在服务器端通过 facebook 完成,因此没有暴露关键信息或设置的风险。这种方法还允许我的用户通过他们自己的 CSS 设置我发送给他们的内容的样式。所有的福利,没有混蛋。
    • 如果您没有及时找到解决方案,并决定使用php,请告诉我,我会帮助您设置一些跨域通信的测试页面。如果您需要,我还可以帮助您为 facebook 设置 php-sdk。
    • 谢谢@Shawn E Carter!,但我想完全理解我的选择:你的意思是使用 php 文件吗:1)我的服务器上有一个 php 文件,小部件将有跨域请求呢?或 2) 用户必须下载带有 js 文件的 php 文件才能连接?最后,我将在两个文件之间传递什么?访问令牌 cookie 值?什么?
    • js文件中的ajax请求,div是用户渲染插件所需的全部内容。用户将安装与喜欢按钮或任何 facebook 社交插件相同的东西。 php 文件包含: 1. 允许跨域的单行设置 2. facebook 的 php-sdk 3. 您可以在 php 中发出与 js 相同的所有请求。 4. php-sdk支持所有access_token的使用,并且隐藏了你的秘钥和token,因为它都是服务器端的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多