Ошибка «Доступ запрещен» при доступе к объекту документа iframe - PullRequest
25 голосов
/ 30 сентября 2008

Для публикации форм AJAX в форме с множеством параметров я использую решение создания iframe, отправки формы в POST и доступа к содержимому iframe. в частности, я обращаюсь к содержанию, как это:

$("some_iframe_id").get(0).contentWindow.document

Я проверил это, и это сработало.

На некоторых страницах я начал получать сообщение об ошибке «Отказано в доступе». Насколько я знаю, этого не должно происходить, если iframe обслуживается из того же домена.

Я почти уверен, что раньше это работало. У кого-нибудь есть подсказка?

Если я не совсем ясно: я публикую в тот же домен . Так что это не междоменный запрос. Я тестирую только на IE.

P.S. Я не могу использовать простые ajax POST-запросы (не спрашивайте ...)

Ответы [ 7 ]

50 голосов
/ 30 сентября 2008

Решил сам!

Проблема заключалась в том, что, хотя правильный ответ отправлялся (проверено с помощью Fiddler), он отправлялся с кодом ошибки HTTP 500 (вместо 200).

Получается, что если ответ отправляется с кодом ошибки, IE заменяет содержимое iframe сообщением об ошибке, загруженным с диска (res://ieframe.dll/http_500.htm), и это вызывает междоменный доступ ошибка отклонена.

6 голосов
/ 03 апреля 2011

Остерегайтесь ограничений безопасности, связанных с iFrames , например, Междоменное ограничение (также известное как CORS). Ниже приведены 3 распространенные ошибки, связанные с CORS:

  1. Загрузить iFrame с другим доменом. (Пример: открытие " www.foo.com ", в то время как верхняя рамка " www.ooof.com ")

  2. Загрузка iFrame с другим портом: URL-адрес iFrame порт отличается от адреса верхнего кадра.

  3. Различные протоколы: загрузка ресурса iFrame через HTTPS, в то время как родительский Frame использует HTTP.

3 голосов
/ 11 февраля 2013

Моя проблема была в заголовке HTTP X-Frame-Options. Моя конфигурация Apache имеет значение:

Header always append X-Frame-Options DENY

Удаление позволило ему работать. В частности, в моем случае я использовал транспорт iframe для jQuery с плагином загрузки файлов jQuery для загрузки файлов в IE 9 и IE 10.

2 голосов
/ 02 августа 2013

Обратите внимание, что если у вас есть iframe с src='javascript:void(0)', то JavaScript, такой как frame.document.location =..., не будет работать с ошибкой «Отказано в доступе» в IE. Использовал библиотеку JavaScript, которая взаимодействует с целевым фреймом. Несмотря на то, что местоположение, на которое он пытался изменить фрейм, находилось в том же домене, что и родительский, для iframe изначально было задано значение javascript: void, что приводило к ошибке отказа в междоменном доступе.

Чтобы решить эту проблему, я создал на своем сайте страницу blank.html, и если мне нужно заранее объявить iframe, который изначально будет пустым до тех пор, пока не будет изменен с помощью javascript, то я указываю на пустую страницу, чтобы src='/content/blank.html' было в том же домене.

В качестве альтернативы вы можете создать iframe полностью через javascript, чтобы вы могли установить src при его создании, но в моем случае я использовал библиотеку, которая требовала, чтобы iframe уже был объявлен на странице.

2 голосов
/ 06 мая 2010

Я знаю, что этот вопрос очень старый, но я хотел бы упомянуть, что приведенный выше ответ сработал для меня: установка одинакового значения document.domain на каждой из страниц - на родительской странице и странице iframe. Однако в моем поиске я нашел эту интересную статью:

http://softwareas.com/cross-domain-communication-with-iframes

0 голосов
/ 30 сентября 2008

, если это проблема домена (или субдомена), например, www.foo.com, отправляющая запрос на www.api.foo.com

на каждой странице вы можете установить

document.domain = www.foo.com

для разрешения "междоменных" разрешений

0 голосов
/ 30 сентября 2008

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

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