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). Также попробовали оба параметра:
Настройки учетной записи → Безопасность → Безопасный просмотр → (включено и отключено)
Может кто-нибудь, пожалуйста, помогите, если я чего-то не хватает?
Ответы
Ответ 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" внутри < стиль > .