频道文件和CDN

时间:2012-05-17 04:35:05

标签: facebook facebook-graph-api facebook-javascript-sdk

我的主要javascript(以及所有静态内容)都包含在https://static.anuary.com中。用户正在浏览的网址为https://dev.anuary.com/somepath/

频道文件需要在哪里,dev.anuary.comstatic.anuary.com?目前是http://static.anuary.com/channel.html


我在问,因为我仍然收到错误消息:

  

不安全的JavaScript尝试使用URL访问框架   https://www.facebook.com/dialog/oauth?access_token=[..]&api_key=[..]&app_id=[..]&client_id=[..]&display=popup&域= dev.anuary.com&安培;语言环境= EN_US&安培;来源= 1&安培; REDIRECT_URI = HTTP%3A%2F%2Fstatic.ak.facebook.com%2Fconnect%2Fxd_arbiter.php%3Fversion%3D6%23CB%3Df3ac7a0544%26origin%3Dhttp% 253A%252F%252Fdev.anuary.com%252Ff373e908a8%26domain%3Ddev.anuary.com%26relation%3Dopener%26frame%3Df312def42c&安培; RESPONSE_TYPE =记号%2Csigned_request&安培;范围=电子邮件%2Cuser_birthday%2Cuser_likes%2Cuser_interests%2Cpublish_stream&安培; SDK =乔伊   来自带框架的框架   http://dev.anuary.com/658fe23c24564ac978c31d167549c4ce8b36686d65a78ad99bfb38765d46e232/。   域,协议和端口必须匹配。


回应@dtbarne:

嗯,这就是事情 - 我仍然不知道,因为我已经尝试了一些方法,以防它产生同样的错误:

  

不安全的JavaScript尝试使用URL访问框架   https://www.facebook.com/dialog/oauth?access_token=[..]&api_key=[..]&app_id=[..]&client_id=[..]&display=popup&域= dev.anuary.com&安培;语言环境= EN_US&安培;来源= 1&安培; REDIRECT_URI = HTTP%3A%2F%2Fstatic.ak.facebook.com%2Fconnect%2Fxd_arbiter.php%3Fversion%3D6%23CB%3Df1ee31b93%26origin%3Dhttp% 253A%252F%252Fdev.anuary.com%252Ff9359b2f%26domain%3Ddev.anuary.com%26relation%3Dopener%26frame%3Df18e94f9c4&安培; RESPONSE_TYPE =记号%2Csigned_request&安培;范围=电子邮件%2Cuser_birthday%2Cuser_likes%2Cuser_interests%2Cpublish_stream&安培; SDK =乔伊   来自带框架的框架   http://dev.anuary.com/658fe23c24564ac978c31d167549c4ce8b36686d65a78ad99bfb38765d46e232/。   域,协议和端口必须匹配。

3 个答案:

答案 0 :(得分:1)

听起来你已经知道了答案。它必须在dev.anuary.com上。目的是允许FB与用户访问的URL之间的通信。

答案 1 :(得分:1)

正如你自己所说的那样,这个错误并不是致命的,而是用来警告用户可能会发生一些可疑的事情。

Facebook还在其错误系统中将此问题标记为By DesignBugs > Unsafe JavaScript attempt to access frame with URL... 此外,这里有很多关于堆栈溢出的线程,例如:Facebook Authentication - Unsafe JavaScript attempt to access frame with URL

现在我们知道这个“错误信息”是不可避免的,只要一切适合你,就可以按照自己的意愿使用频道。
您甚至不需要使用该通道,如文档中所述:

  

channelUrl参数是可选的,但建议使用。提供一个   通道文件可以帮助解决三个特定的已知问题。第一,   包含跨帧通信的代码的页面可能会导致社交   没有channelUrl的插件显示为空白。第二,如果没有   提供channelUrl,页面包括自动播放音频或   视频,用户可能会听到两个音频流,因为页面有   已在背景中第二次加载跨域   通讯。第三,通道文件将阻止包含额外的   点击服务器端日志。如果你没有指定channelUrl,那么你   可以删除包含fb_xd_bust或fb_xd_fragment的页面视图   日志中的参数以确保正确计数。

但它也说明了:

  

频道文件解决了跨域通信的一些问题   在某些浏览器中。

所以由你来决定 我个人建议使用频道并从常规服务器而不是从静态服务器提供文件 但是,您应该将输出设置为具有较长的缓存过期日期,以便您的服务器不会收到大量对此文件的请求,正如他们在JS SDK documentation page中提到的那样:

<?php
   $cache_expire = 60*60*24*365;
   header("Pragma: public");
   header("Cache-Control: max-age=".$cache_expire);
   header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT');
?>
<script src="//connect.facebook.net/en_US/all.js"></script>

(php示例,但可以使用任何语言完成)。

希望这个答案可以为你澄清事情。

答案 2 :(得分:0)

频道文件应位于用户访问的服务器/地址上,因为频道文件用于修复某些跨站点的javascript错误。如果用户始终使用HTTPS访问您的网站,则应使用HTTPS以及任何其他内容引用该频道文件。

频道文件本身应保持为<script src="//connect.[..],但要确保所有静态内容和JS包含所有内容都包含https。