Ошибка: в доступе запрещено свойство 'document' в iFrame
У меня есть родительская HTML-страница, которая использует jquery для добавления динамического iframe, который имеет источник в другой домен. Я уже установил X-Frame-Options, чтобы разрешить это, и загрузка простого контента не является проблемой. На самом деле все остальные мои скрипты работают нормально.
HTML-страница, которая загружается в iFrame, использует плагин jQuery DirtyForms, который имеет несколько строк, которые выглядят как $(document). Код грязных форм и сценарии jQuery являются локальными по отношению к документу iframe.
Когда выполняется любая из этих строк, я получаю следующую ошибку в Firefox (я не тестировал другие браузеры): Ошибка: в доступе отказано в доступе к свойству "документ".
Я читал об этом, и это кажется проблемой, если родительская страница пытается получить доступ к сценариям ребенка или наоборот, но в моем случае ошибочные сценарии являются локальными для ребенка.
КСТАТИ. Дочерний код, когда он НЕ загружен в iFrame, работает отлично.
Я сейчас в растерянности, чтобы найти обходной путь.
Я предполагаю, что $(document) как-то оценивается как родительский.
Есть ли способ исправить это поведение? Возможно, изменив код плагинов. Возможно, $(document).find('contentWindow')...??
Я ценю помощь! Благодарю.
2 ответа
Ну, вы не можете получить к нему доступ. Теперь вопрос, почему?
Для этого просто перейдите по ссылкам ниже
В доступе отказано в доступе к свойству "документ"
Ошибка: в доступе отказано в доступе к свойству "документ"
И в случае, если вы хотите что-то сделать при загрузке страницы, лучше используйте приведенный ниже код для IFrame.
<iframe ........ onload='yourFunction( this )'>
В Dirty Forms 1.x поведение по умолчанию добавляет обработчики событий к тегам привязки на любой родительской странице, на которой размещена текущая страница. Код, который делает это выглядит так:
$(top.document).on('click', 'a', aBindFn);
$(top.document).on('submit', 'form', formBindFn);
То есть он прикрепляет обработчики событий к window.top.document
, Вы можете отключить это поведение с помощью:
$.DirtyForms.watchParentDocs = false;
В Dirty Forms 2.x это поведение было удалено, поскольку оно относилось только к одному конкретному случаю использования iFrames (размещение формы, которая использовала Dirty Forms в iFrame). Теперь вы можете настроить привязку событий, чтобы прикреплять обработчики событий либо к родительским (хостовым) страницам, либо к дочерним iFrames, как того требует ваша страница, но по умолчанию взаимодействие с iFrames отсутствует. Это должно позволить вам обойти такие проблемы, как этот.