Facebook和Cross Domain Messaging的SecurityError

Jsh*_*523 18 javascript facebook cross-domain ios facebook-javascript-sdk

我们有一个利用facebook javascript sdk和登录功能的应用程序.

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

SecurityError(DOM Exception 18):阻止具有源" 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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么我们只在iOS设备和版本10.3上出现此错误?

Tid*_*ddo 15

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

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
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,错误发生在extractForms函数中的某个位置,对于我们来说,它不存在于代码库中的任何位置.谷歌搜索显示,无论extractFormsextractNewForms包括浏览器的自动填充库的一部分,并且线程这里建议书中有一个bug(评论12和15是最符合您的问题).

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

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

  • 我的网站上有同样的错误.只有来自ipad和iphone的用户才能体验到它. (2认同)