SecurityError из Facebook и межсетевых сообщений

У нас есть приложение, которое использует функции javascript javascript и возможности входа в систему.

Мы заметили, что эта ошибка появилась в наших журналах. В частности, для iOS-устройств с версиями 10.3 и выше. Также кажется, что он ориентирован только на сафари-браузеры.

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);
            }
        }

Мой вопрос, почему мы получаем эту ошибку только на устройствах iOS и версиях 10.3?

Ответы

Ответ 1

Я тоже столкнулся с этой проблемой, и после того, как он копался, кажется, что ошибка в автозаполнении браузера: стек, который отправляется в наш кластер протоколирования, выглядит следующим образом:

[email protected]://example.com:5:190, 
[email protected]://example.com:7:323, 
[email protected]://example.com:13:37, 
[email protected]://example.com:8:381, 
global [email protected]://example.com:1:98

Как вы можете видеть, ошибка происходит где-то в функции extractForms, которая (для нас) не существует нигде в базе кода. Поиск Google показывает, что оба extractForms и extractNewForms являются частью библиотеки автозаполнения браузера, а поток здесь показывает, что есть ошибка (комментарии 12 и 15 наиболее важны для вашей проблемы).

Насколько я могу судить, это также не связано конкретно с Facebook: в наших журналах мы видим похожие ошибки для большего числа iframe, включая iframes из (под) доменов, которыми мы управляем сами.

К сожалению, я не знаю о каких-либо исправлениях или обходных решениях, и я также очень сомневаюсь, что возможно (исправление/обход пользователя). Я думаю, что единственное, что вы можете сделать, это проигнорировать эти ошибки.