Подтвердить что ты не робот

Facebook: проблема с небезопасным JavaScript (значения document.domain должны быть одинаковыми)

Mine - это приложение FB на основе холста. Столкнувшись с проблемой как в Chrome, так и в Firefox (хотя обычно Chrome):

1. Когда я ударил свой одобренный защищенный URL-адрес приложения fb в новом окне Chrome с инкогнито (https://apps.facebook.com/myfbappnamespace/), ошибка ниже появляется только в первый раз, и когда я обновляю страницу, ошибка исчезла (в большинстве случаев)

Страница около: blank отображается небезопасное содержимое из http://static.ak.facebook.com/connect/xd_arbiter.php?version=18#cb=f2e4fe7b... os.com% 2Ff4aeadb2 & domain = www.mydomain.com & ratio = parent & error = unknown_user.

Небезопасная попытка JavaScript для доступа к фрейму с URL-адресом http://www.mydomain.com/control/myfacebookapp/ из фрейма с URL-адресом http://static.ak.facebook.com/connect/xd_arbiter.php?version=18#cb=f2e4fe7b... os.com% 2Ff4aeadb2 & domain = www.mydomain.com & ratio = parent & error = unknown_user. Кадр, запрашивающий доступ, устанавливает "document.domain" на "facebook.com", но доступ к кадру не сделал. Оба должны установить 'document.domain' до того же значения, чтобы разрешить доступ.
xd_arbiter.php: 18

Небезопасная попытка JavaScript для доступа к фрейму с URL-адресом http://www.mydomain.com/control/myfacebookapp/ из фрейма с URL-адресом http://static.ak.facebook.com/connect/xd_arbiter.php?version=18#cb=f2e4fe7b... os.com% 2Ff4aeadb2 & domain = www.mydomain.com & ratio = parent & error = unknown_user. Кадр, запрашивающий доступ, устанавливает "document.domain" на "facebook.com", но доступ к кадру не сделал. Оба должны установить 'document.domain' до того же значения, чтобы разрешить доступ. xd_arbiter.php: 18

2.Когда я попробую http url (http://apps.facebook.com/myfbappnamespace/), ошибка, отображаемая на консоли:

Небезопасная попытка JavaScript для доступа к фрейму с URL-адресом http://apps.facebook.com/myfbappnamespace/ из фрейма с URL-адресом https://s-static.ak.facebook.com/connect/xd_arbiter.php?version=18#channel=... Fcontrol% 2Ffacebookappannannurl% 3Ffb_xd_fragment% 23xd_sig% 3Df23e84e85c% 26. Запрос доступа к кадру имеет протокол "https", причем кадр Доступ имеет протокол "http". Протоколы должны соответствовать.

Теперь, когда я вхожу на учетную запись fb, чтобы узнать, что происходит с этими ошибками, они исчезли, снова только иногда. Я знаю, что я использую "большую часть времени" и "иногда" здесь, в моем запросе, но это именно то, что происходит со мной. Я также искал форумы и понял, что fb уже исправил эту старую проблему, которая должна была быть хромной. Я убедился, что мои FB.init и другие вызовы являются специфичными для location.protocol. Также настроены правильные значения в URL-адресе холста (http) и защищенного URL-адреса холста (https). Также попробовали оба параметра: Настройки учетной записи → Безопасность → Безопасный просмотр → (включено и отключено)

Может кто-нибудь, пожалуйста, помогите, если я чего-то не хватает?

4b9b3361

Ответ 1

Есть много возможных проблем. Попробуйте одно из следующих решений:

  • Протоколы
  • должны быть одинаковыми (поэтому страница, которая пытается получить доступ к iframe, должна иметь тот же протокол сайта, который предоставляет iframe), поэтому, если вы тестируете свое приложение в режиме песочницы (http вместо https), отключите режим "Безопасный просмотр" вашей тестовой учетной записи.
  • channelUrl on FB.init() (см. код ниже)
  • включить модем заголовка apache и поместить ниже строки в ваш .htaccess
  • поместите тег <div id="fb-root"></div> после тега body, как описано в документе fb здесь: https://developers.facebook.com/docs/reference/javascript/
  • попытайтесь поместить весь автоматический код входа в систему после действия пользователя (например, щелчок по кнопке входа в систему)
  • удалите конечную косую черту с URL холста (в настройках приложения →), например http://yoursite.com?
  • отредактируйте тэг <html> следующим образом: <html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="https://www.facebook.com/2008/fbml">

Код для .htaccess

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

Код для каналов:

FB.init({
    appId: '1234567890',
    status: true,
    cookie: true,
    xfbml: true,
    channelUrl : '//yoursite.com/channel.html'
});

channel.html, поставляемый вашим сервером, должен содержать следующую строку:

<script src="//connect.facebook.net/en_US/all.js"></script>

ИЗМЕНИТЬ

О вашей первой проблеме:

The page at about:blank displayed insecure content from http://static.ak.facebook.com/connect/xd_arbiter.php?version=18#cb=f2e4fe7b…os.com%2Ff4aeadb2&domain=www.mydomain.com&relation=parent&error=unknown_user.

Это ожидаемое исключение, которое используется для проверки состояния - это не имеет побочных эффектов, поэтому его не волнует.

Пожалуйста, обратитесь к этому вопросу: Небезопасная попытка JavaScript получить доступ к фрейму с URL-адресом: Домены, протоколы и порты должны соответствовать.

Ответ 2

В моем случае у меня был "facebook-like-box" в представлении "_Layout", и мне пришлось настроить для него CSS, в файле global.css.

.fb_iframe_widget, .fb_iframe_widget span, .fb_iframe_widget span iframe[style] {
    width: 100% !important;
}

Затем, когда я пытался загружать внутренние страницы, такие как статьи и новости, у которых есть кнопка общего доступа для facebook, она начинает давать мне эту ошибку:

Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin "http://localhost:51826" from accessing a frame with origin "http://static.ak.facebook.com". The frame being accessed set "document.domain" to "facebook.com", but the frame requesting access did not. Both must set "document.domain" to the same value to allow access.

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

  • Удаление этой строки кода CSS решило проблему.
  • Перемещение этой строки кода CSS на конкретную страницу, которая имеет "facebook-like-box" внутри < стиль > .