【问题标题】:SecurityError from Facebook and Cross Domain Messaging来自 Facebook 的 SecurityError 和跨域消息传递
【发布时间】:2017-09-10 00:31:20
【问题描述】:

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

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

SecurityError (DOM Exception 18): Blocked a frame with origin “https://www.mymadeupsite.com”来自访问具有原点的框架 “https://staticxx.facebook.com”。被访问的框架集 “document.domain”到“facebook.com”,但请求访问的框架 没有。两者都必须将“document.domain”设置为相同的值才能允许 访问。

这是我们的初始化函数:

        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 上收到此错误?

【问题讨论】:

    标签: javascript ios facebook cross-domain facebook-javascript-sdk


    【解决方案1】:

    我也遇到了这个问题,经过深入研究后,它似乎是浏览器自动填充中的一个错误:发送到我们的日志集群的堆栈跟踪如下所示:

    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 函数的某处,(对我们而言)在代码库的任何地方都不存在。谷歌搜索显示extractFormsextractNewForms 都是浏览器自动填充库的一部分,线程here 表明其中存在错误(cmets 12 和 15 与您的问题最相关)。

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

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

    【讨论】:

    • 应该根据您链接到的主题从 Chrome 59(2017 年 5 月)开始修复。
    • 我的网站上有同样的错误。只有 ipad 和 iphone 用户才能体验。
    • 刚刚也收到了一堆错误报告,来自 iOS 10.3.1 和 Chrome 60
    猜你喜欢
    • 2013-05-27
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    相关资源
    最近更新 更多