我的主要javascript(以及所有静态内容)都包含在https://static.anuary.com
中。用户正在浏览的网址为https://dev.anuary.com/somepath/
。
频道文件需要在哪里,dev.anuary.com
或static.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/。 域,协议和端口必须匹配。
答案 0 :(得分:1)
听起来你已经知道了答案。它必须在dev.anuary.com上。目的是允许FB与用户访问的URL之间的通信。
答案 1 :(得分:1)
正如你自己所说的那样,这个错误并不是致命的,而是用来警告用户可能会发生一些可疑的事情。
Facebook还在其错误系统中将此问题标记为By Design
:Bugs > 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。