我的示例 Facebook 应用程序昨天在 Chrome 中运行良好。该页面通过 JavaScript SDK 集成了 Silverlight 广告 Facebook。我可以检查基本登录状态、登录 Facebook、获取您的姓名并注销。
今天,在我没有做任何更改的情况下,它在 Chrome 中被破坏了,出现了一个在 Google 搜索结果中很常见的 JavaScript 错误,但没有真正的答案。它在 IE 和 Firefox 中仍然运行良好。
这是公共(public)网址:
http://www.andrewdothay.net/prj/facebook/
当您在 Chrome 中打开 JavaScript 控制台时,它会抛出大量错误:
不安全的 JavaScript 尝试访问带有 URL 的框架
http://www.facebook.com/login.php?api_key=151352704876752&cancel_url=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%23cb%3Df1175dd3f%26origin%3Dhttp%253A%252F%252Fwww.andrewdothay.net%252Ff304d89d8%26relation%3Dopener%26transport%3Dpostmessage%26frame%3Df3760623c%26result%3DxxRESULTTOKENxx&channel_url=http%3A%2F%2Fwww.andrewdothay.net%2Fprj%2Ffacebook%2F&display=popup&fbconnect=1&locale=en_US&method=auth.login&next=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%23cb%3Df3c546942%26origin%3Dhttp%253A%252F%252Fwww.andrewdothay.net%252Ff304d89d8%26relation%3Dopener%26transport%3Dpostmessage%26frame%3Df3760623c%26result%3DxxRESULTTOKENxx&return_session=1&sdk=joey&session_version=3&v=1.0来自带有 URL 的框架 http://www.andrewdothay.net/prj/facebook/ .
域、协议(protocol)和端口必须匹配。
关于这里的 Chrome 有什么想法吗?
更新
我发现当我调用 FB.login() 时,今天机器上的 Chrome 会阻止登录弹出窗口,但我知道我昨天没有在 JavaScript 控制台中收到那些 190 条错误消息。
因此,当我在 Chrome 中允许弹出窗口时,它确实适用于最终用户,但所有这些新的错误消息正在扼杀我作为开发人员的诊断体验。
最佳答案
我找到了解决方案。如果您在没有用户操作的情况下执行 FB.login,webkit 会阻止弹出窗口。
例如,我在我的项目中使用了邀请系统。有输入/文本输入邀请码。我检查了邀请代码是否可用于 ajax/post 请求。如果可用,我运行 FB.login()。如您所料,浏览器阻止了弹出窗口,并且在 js 控制台出现了大量错误。
因此您必须在用户操作后运行 FB.login()。我将在 ajax/post 和 FB.login() 之间放置一个 facebook 登录按钮。用户将不得不单击它 - 这很糟糕 - 但他们不会看到任何问题。
顺便说一句,几天后问题再次出现。我认为这是关于浏览器的信任系统。当你开发它的时候,你访问了很多次,浏览器一开始认为它是可靠的。我不确定这部分,但我的解决方案有效。
关于javascript - Facebook 在 Chrome 中给出 "Unsafe JavaScript attempt to access frame with URL"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3577947/