Facebook выдает сообщение об ошибке «Небезопасная попытка JavaScript получить доступ к фрейму с URL» - PullRequest
60 голосов
/ 26 августа 2010

Вчера в Chrome отлично работало мое приложение Facebook. Страница объединяет Silverlight и Facebook через JavaScript SDK. Я могу проверить основной статус входа в систему, войти в Facebook, получить ваше имя и выйти из системы.

Сегодня, без каких-либо изменений с моей стороны, он поврежден в Chrome с ошибкой JavaScript, которая очень часто встречается в результатах поиска Google, но не дает реальных ответов. Он по-прежнему прекрасно работает в IE и Firefox.

Вот публичный URL:

http://www.andrewdothay.net/prj/facebook/

Когда вы открываете консоль JavaScript в Chrome, выдается множество таких ошибок:


Небезопасная попытка 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/.

Домены, протоколы и порты должны совпадать.


Есть идеи о том, что здесь происходит с Chrome?


Обновление

Я обнаружил, что Chrome на сегодняшней машине блокировал всплывающее окно входа в систему, когда я вызывал FB.login (), но я знаю, что вчера не получал эти 190 сообщений об ошибках в консоли JavaScript.

Итак, когда я разрешаю всплывающие окна в Chrome, он работает для конечного пользователя, но все эти новые сообщения об ошибках убивают мой опыт диагностики как разработчика.

Ответы [ 8 ]

29 голосов
/ 04 марта 2011

Я нашел решение.Если вы выполняете FB.login без действий пользователя, webkit блокирует всплывающие окна.

Например, я использовал систему приглашений в своем проекте.Был ввод / текст для ввода кода приглашения.Я проверил, что код приглашения доступен в запросе ajax / post.если он доступен, я запускаю FB.login ().Как вы уже догадались, браузер заблокировал всплывающее окно, и на консоли js появилось множество ошибок.

Поэтому вы должны запустить FB.login () после действия пользователя.Я помещу кнопку входа в Facebook между ajax / post и FB.login ().Пользователи должны будут щелкнуть по нему - это отстой, - но они не увидят проблему.

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

5 голосов
/ 22 июня 2011

В моем случае это было из-за того, что Facebook JS загружался несколько раз на одной странице: один для входа в систему и второй для кнопки «Мне нравится».Удаление ссылки в модуле «лайк» спасает день.

2 голосов
/ 17 апреля 2013

Удаление опции 'xfbml: true' из моего вызова FB.init исправило это для меня.

У меня была проблема в интернет-браузере по умолчанию на Android Jelly Bean

2 голосов
/ 09 января 2013

В моем случае проблема была связана с тегом <div id="fb-root"></div>.Я не помещал его сразу после открывающего тега <body>, , как рекомендовано документами .

После помещения его в нужное место, ошибка «Небезопасный JavaScript ...»остановился.

2 голосов
/ 17 марта 2011

Mücahit Yılmaz правильно.Возьмите пример, который я вставил ниже, и если вы используете метод setTimeout (), он потерпит неудачу, в противном случае он будет работать.Я все еще получаю предупреждающее сообщение в цикле, пока я не войду в систему, но это небольшая цена.Я уверен, что пользователи не увидят его.

$(document).ready(function() {
$("#facebook_link").click(function() {
    //setTimeout(fb);
    fb();
    return false;
});

function fb() {
    FB.getLoginStatus(function(response) {
        if (response.session) {
            // logged in and connected user, someone you know
            gotResponse(response);
        } else {
            // no user session available, someone you dont know
            FB.login(function(response) {
                if (response.session) {
                    // user successfully logged in
                    gotResponse(response);
                } else {
                    // user cancelled login, do nothing
                }
            });
        }
    });
}

function gotResponse(response) {
    console.dir(response);
}

});

Воспроизвести несложно: войдите в Facebook на другой вкладке, попробуйте этот код, и вы увидитепредупреждений нет.Выйдите из системы, затем попробуйте код, и вы получите предупреждения.Это потому, что он попадает в блок .login.

1 голос
/ 29 апреля 2014

И в моем случае проблема была связана с типом протокола: от:

<div class="fb-like-box" data-href="https://www.facebook.com/xxxxxx"

до:

<div class="fb-like-box" data-href="http://www.facebook.com/xxxxxx"

, так как мой интернет-магазин не использовал https, я удалил 's'из атрибута data-href для likebox.

1 голос
/ 27 марта 2012

У меня была эта проблема с браузером Chrome, и это было связано с моими настройками Chrome. У меня был настроен браузер, чтобы запретить сторонним сайтам устанавливать данные cookie. Разрешение всплывающих окон не было проблемой для меня. Когда iFrame facebook создан, он должен установить cookie, который он затем использует для отслеживания необходимости входа пользователя. Если этот cookie не разрешено устанавливать, сайт не работает. Одна вещь, которая будет полезна в API Facebook, - это настройка, которая показывает, когда что-то не работает. Я не рассматриваю это как событие, на которое можно подписаться и назначить обратный вызов.

Вот ссылка на FB javascript sdk по подписке. Любой ответ при поиске обратного вызова для неудавшихся запросов будет принят.
https://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/

0 голосов
/ 14 сентября 2012

Решение Mücahit Yılmaz также помогло мне. Мне не нужно было получать доступ к информации о пользователе, поэтому я удалил сценарий входа из примера приложения. Также удалено приветственное сообщение и любая информация, требующая информации, хранящейся в переменной $basic.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...