7

在 Google Chrome(我在 9.0.597.98)中,我使用 Graph API/Javascript SDK 的 Facebook iFrame 应用程序往往总是基于跨域脚本抛出以下两个 JavaScript 错误(见下文),但仅在应用程序的一页上.

它在第二条消息上进入无限重试循环。离开它一夜之后,到今天早上它报告了 50 万次重试!

正在使用的 FB 调用用于登录:

FB.login(function(response) {
  if (response.session) {
    // user successfully logged in
  } else {
    // user cancelled login
  }
});

在 Firefox 和 IE9 中,我没有收到这些错误。它特定于 Chrome(可能是 WebKit)。 奇怪的是,我在应用程序中有第二个页面,FB.Login除了其他浏览器之外,它还可以在 Chrome中使用。我在某处读到 Safari 对跨域脚本有更严格的要求——它和 Chrome 共享相同的代码库。

Domains, protocols and ports must match(错误消息)我相信实际上很满意,因为我有另一个与FB.Login调用一起工作的页面我看到这两条消息之间的唯一其他区别是postmessage查询参数对每个都有不同的值(在消息中加粗)。但是,只有一个 iFrame 构成 Facebook 应用程序,所以我想知道为什么两个不同的值可能一个接一个地使用。我并不是要引导答案集中在这个项目上,但我确实想指出这一点。

欢迎就我可能会尝试解决此错误的建议提出建议。

Chrome JavaScript 控制台消息:

消息 1:不安全的 JavaScript 尝试使用 URL 访问框架

https://www.facebook.com/dialog/permissions.request?api_key=168297653202478&app_id=168297653202478&display=popup&fbconnect=0&locale=en_US&method=permissions.request&next=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy。 php%23cb%3Df3d15633dc%26origin%3Dhttp%253A%252F%252Fsubdomain.example.com%252Ff22a8befa%26relation%3Dopener%26transport%3D postmessage %26frame%3D f111baf6f4 %26result%3D%2522xxRESULTTOKENxx%2522&perms=publish_stream%2Coffline_access&return_session=1&sdk= joey&session_version=3 来自带有 URL 的框架http://subdomain.example.com/colonversationmap/Admin.TestPage.aspx?signed_request=871miFgH_-o05POnx20387XHd2YlArKLU6qUv8VkxY4.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTI5ODQyMDEwMSwidXNlciI6eyJjb3VudHJ5IjoiY2EiLCJsb2NhbGUiOiJlbl9VUyIsImFnZSI6eyJtaW4iOjIxfX19 . 域、协议和端口必须匹配。

消息 2:不安全的 JavaScript 尝试使用 URL 访问框架

https://www.facebook.com/dialog/permissions.request?api_key=168297653202478&app_id=168297653202478&display=popup&fbconnect=0&locale=en_US&method=permissions.request&next=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy。 php%23cb%3Df304d46e08%26origin%3Dhttp%253A%252F%252Fsubdomain.example.com%252Ff23ce8203%26relation%3Dopener%26transport%3D postmessage %26frame%3D fcd3637bc %26result%3D%2522xxRESULTTOKENxx%2522&perms=publish_stream%2Coffline_access&return_session=1&sdk= joey&session_version=3 来自带有 URL 的框架http://subdomain.example.com/colonversationmap/Admin.TestPage.aspx?signed_request=871miFgH_-o05POnx20387XHd2YlArKLU6qUv8VkxY4.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTI5ODQyMDEwMSwidXNlciI6eyJjb3VudHJ5IjoiY2EiLCJsb2NhbGUiOiJlbl9VUyIsImFnZSI6eyJtaW4iOjIxfX19 . 域、协议和端口必须匹配。

4

4 回答 4

3

我还遇到了在 Chrome 中没有调用getLoginStatus()的问题。我尝试在页面加载时调用它,并且在用户发起的操作没有成功之后调用它。

原来不是跨域问题。Chrome 中的Un-Passwordise扩展程序阻止了呼叫。一旦我禁用了扩展程序,它就可以完美运行,即使在页面加载时也是如此。

此处有关此问题的更多信息:FB.getLoginStatus 从不触发 Facebook 的 JavaScript SDK 中的回调函数

于 2012-01-22T20:08:49.637 回答
2

就我而言,事实证明,每当我FB.login(..)在页面或 DOM 加载后立即调用 Facebook JavaScript API 的方法时,Chrome 都会抱怨。

为了规避 Chrome 中的这个问题,我在页面上放置了一个按钮,用户必须单击该按钮才能启动登录脚本。这适用于 Chrome。这是一种解决方法,但现在对我来说已经足够了。

注意:对于我在我的问题中提到的有效的辅助页面,它已经设置为用户启动的登录提示。

于 2011-02-23T21:31:37.673 回答
2

添加频道文件可能有助于解决此问题。请参阅 Facebook Javascript API 文档: https ://developers.facebook.com/docs/reference/javascript/

于 2011-12-24T23:48:44.227 回答
2

我在我的网站上遇到了这个问题,但结果我使用的是旧版本的 FB.login。

从 Facebook FB.login页面:

自 2011 年 12 月 13 日起,JavaScript SDK 现在仅支持 OAuth 2.0 进行身份验证。在 JS SDK 中启用 OAuth 2.0 的功能于 7 月首次引入。所有应用程序都在 2011 年 10 月 1 日之前进行测试和迁移。进行此更改后,请确保您已替换response.sessionresponse.authResponse. 要请求权限,您必须使用scope而不是perms. 在此处阅读有关具体更改的更多信息。

于 2012-01-23T23:10:16.033 回答