Facebook使用来自不同域的代码

时间:2012-04-23 19:23:31

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

我正在js中创建一个将在许多网站上实现的小部件,
Facebook要求我给他们“我的域名”,以便他们知道我已经过验证 问题是该小部件将在许多网站上使用,我不打算将所有这些域名列入Facebook。 如何才能让我的应用程序仅使用js从这些不同的网站开始工作? (对于小部件)

提前致谢。

2 个答案:

答案 0 :(得分:2)

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

另一种选择是创建一堆Facebook应用程序,每个应用程序属于不同的域。这也会在维护方面带来一些痛苦,但它会简化您需要编写相当多的JS代码。这种方法在稳健性方面有一些优势 - 如果其中一个使用您的小部件的网站变得流氓并且因任何原因而禁止该应用程序,那么您的其他客户端网站将不会受到影响。

Facebook曾经提供“克隆应用程序”工具,但刚才我找不到它。

答案 1 :(得分:0)

我使用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>