Чтобы обойти политику того же происхождения, вы должны использовать document.domain
- как на главной странице, так и в iframe, установите его в качестве домена главной страницы. Таким образом, если ваша главная страница находится в домене foo.com
, а ваш iframe загружается с bar.foo.com
, на обеих страницах установите document.domain = 'foo.com'
. Вы должны сделать это для главной страницы, даже если вы установите для нее то же значение - см. Примечание ниже.
Теперь, чтобы получить элемент, вы можете делать то, что описано в этом SO-ответе :
var iframe = document.getElementById('iframeId');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
Обновление
У MDC есть это, чтобы сказать:
Mozilla различает свойство document.domain, которое никогда не устанавливалось, из одного явно установленного в тот же домен, что и URL-адрес документа, даже если свойство возвращает одно и то же значение в обоих случаях. Один документ может получить доступ к другому, если они оба установили document.domain в одно и то же значение, что указывает на их намерение сотрудничать, или ни один из них не установил document.domain и домены в URL-адресах одинаковы (реализация). Если бы не эта специальная политика, каждый сайт подвергался бы XSS со своих поддоменов (например, https://bugzilla.mozilla.org может быть атакован ошибками вложения на https://bug*.bugzilla.mozilla.org).
Таким образом, и iframe, и включающая страница должны устанавливать одно и то же значение для document.domain