Facebook身份验证 - 不安全的JavaScript尝试使用URL访问框架

时间:2011-11-04 16:57:21

标签: php javascript facebook facebook-oauth

我正在尝试将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吗?

编辑:当我上传到具有公共域的服务器时出现同样的问题。

7 个答案:

答案 0 :(得分:4)

您看到的错误是非致命错误。没有解决方法,因为您的浏览器建议您从外部域加载JavaScript不是一个好主意。如果您的脚本没有运行,请忽略此消息并查找其他地方的错误。 Sajith也是正确的,你无法从localhost调试。

另见 "Unsafe JavaScript attempt to access frame with URL..." error being continuously generated in Chrome webkit inspector

答案 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');
  //...
});