我正在尝试将Facebook登录系统应用到我的网站中。
当它尝试连接到Facebook时,我从控制台日志中收到错误:
Unsafe JavaScript attempt to access frame with URL https://s-static.ak.fbcdn.net/connect/xd_proxy.php?xxxxxxxxxxxxxxxx
我正在使用JavaScript SDK
我在body
标记中添加了此内容:
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'xxxxxxxxxxxxxx',
status : true,
cookie : true,
xfbml : true
});
};
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
Facebook登录按钮:
<div class="fb-login-button" data-perms="email">Login with Facebook</div>
我正在从localhost进行测试 - 我在facebook开发应用程序上注册了我的网站(网站网址:http://localhost
)
如何解决这个问题?或者我应该使用PHP SDK吗?
编辑:当我上传到具有公共域的服务器时出现同样的问题。
答案 0 :(得分:4)
您看到的错误是非致命错误。没有解决方法,因为您的浏览器建议您从外部域加载JavaScript不是一个好主意。如果您的脚本没有运行,请忽略此消息并查找其他地方的错误。 Sajith也是正确的,你无法从localhost调试。
答案 1 :(得分:2)
请务必在页面顶部显示此行(适用于我):
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="https://www.facebook.com/2008/fbml">
答案 2 :(得分:1)
无法使用域localhost测试所有Facebook集成。您需要将脚本放在任何公共访问域中,并且需要更新开发人员应用程序设置页面中的URL。 JavaScript显示的安全错误是由于facebook脚本的本地主机访问
答案 3 :(得分:1)
您只能使用您在Facebook应用中注册的相同域名。
1. You need a public domain name (www.example.com). 2. You need to register with Facebook apps. 3. Get the 2 keys from the Facebook and use in the code:
appId : 'xxxxxxxxxxxxxx',
答案 4 :(得分:0)
我实施fileglu时出现此错误,因为您正在运行localhost,可能会出现CORS错误。尝试在Facebook上运行,你可以用下面的代码替换下半部分:
(function() {
var e = document.createElement('script');
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js#appId=<your-app-id>&xfbml=1';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
我的FB.init()页面也启用了Oauth 2.0和自定义通道。有关详细信息,请参阅:http://fbdevwiki.com/wiki/FB.init。
答案 5 :(得分:0)
您可以调整您的localhost计算机,使其看起来属于Facebook所需的域名。
在linux或OSX上,在/ etc / hosts中添加一个条目;在Windows上,编辑c:\ windows \ system32 \ drivers \ etc \ hosts。添加如下条目:
127.0.0.1 local-dev.mydomain.com local-dev
其中“mydomain.com”是您的FB应用ID注册的域。
答案 6 :(得分:0)
在我的情况下,错误是由在已经拥有FB应用程序的网站上使用addthis加载的相似小部件引起的。
看起来问题与多个fb js-sdk冲突。
因此,解决方案可以像小工具一样替换像本地脸书网站的wtget这样的Facebook。
当没有加载js-sdk时,我在webkit中还有另一个错误。我通过jQuery.getScript()替换window.fbAsyncInit来修复它。 最终它修复了错误“不安全的JavaScript尝试访问带URL的帧”。
以下是示例:
$.ajaxSetup({ cache: true });
$.getScript('//connect.facebook.net/en_UK/all.js', function() {
FB.init({
appId: 'your app id',
cookie: true,
xfbml: true,
oauth: true,
status: true
});
// Trigger custom event so we can use it to run init dependent actions in different places.
$(document).trigger('FBSDKLoaded');
//...
});