来自Facebook和跨域消息传递的SecurityError

我们有一个应用程序,利用Facebook的JavaScript SDK和loginfunction。

我们一直在注意到这个错误出现在我们的生产日志中。 特别适用于版本为10.3及更高版本的iOS设备。 也似乎只针对Safari浏览器

SecurityError(DOMexception18):阻止源自“ https://www.mymadeupsite.com ”的框架访问源自“ https://staticxx.facebook.com ”的框架。 被访问的框架将“document.domain”设置为“facebook.com”,但是请求访问的框架没有。 两者都必须将“document.domain”设置为相同的值以允许访问。

这是我们的init函数:

init: function(options) { var facebookUrl, scriptInclude; Facebook.baseHost = options.baseHost; if (typeof FB !== "undefined" && FB !== null) { return Facebook.setup(); } else { if (options.appId == null) { throw 'Facebook: cannot init without appId'; } window.fbAsyncInit = function() { FB.init({ appId: options.appId, version : 'v2.3', channelUrl: options.channelUrl || ("" + document.location.protocol + "//" + document.location.host + "/channel.html"), status: true, cookie: false, xfbml: false, oauth: true }); return Facebook.setup(); }; $('body').append('<div id="fb-root"></div>'); facebookUrl = "//connect.facebook.net/" + (Facebook.getLocaleFacebookSupports(Social.SETTINGS.fbLocale)) + "/sdk.js"; scriptInclude = "<script type=\"text/javascript\" async=\"true\" src=\"" + facebookUrl + "\"></script>"; return $('#fb-root').append(scriptInclude); } } 

我的问题是,为什么我们只能在iOS设备和版本10.3上得到这个错误?

我也遇到了这个问题,并且在挖掘之后,似乎是浏览器自动填充中的一个错误:发送到我们的日志集群的堆栈跟踪如下所示:

 g@https://example.com:5:190, g@https://example.com:7:323, extractNewForms@https://example.com:13:37, extractForms@https://example.com:8:381, global code@https://example.com:1:98 

正如你所看到的,这个错误发生在extractForms函数的某个地方,对于我们来说,这个函数并不存在于代码库的任何地方。 谷歌search显示, extractFormsextractNewForms都是浏览器的自动填充库的一部分, 这里的线程表明这里有一个bug(注释12和15与你的问题最相关)。

据我所知,这也与Facebook没有特别的关系:在我们的日志中,我们看到类似的错误更多的iframe,包括我们控制自己的(子)域的iframe。

不幸的是,我不知道任何解决方法或解决方法,我也非常怀疑是否(用户地)修复/解决方法实际上是可能的。 我认为你唯一能做的就是忽略这些错误。