Как прочитать DOM iframe, загруженного страницей из другого домена? - PullRequest
2 голосов
/ 03 декабря 2008

Есть ли способ доступа к DOM документа в iframe из родительского документа, если документ в iframe находится в другом домене? Я могу легко получить к нему доступ, если родительские и дочерние страницы находятся в одном домене, но мне нужно иметь возможность делать это, когда они находятся в разных доменах.

Если нет, возможно, есть какой-то другой способ ЧИТАТЬ содержимое iframe (одним из соображений было создание элемента управления ActiveX, поскольку это было бы только для внутреннего корпоративного использования, но я бы предпочел, чтобы он был кросс-браузерным )

Ответы [ 3 ]

3 голосов
/ 03 декабря 2008

Не совсем. Это важно для безопасности - в противном случае вы можете открыть мой сайт онлайн-банкинга или веб-почту и связываться с ним.

Вы можете немного ослабить ограничение , установив document.domain, но домен верхнего уровня должен быть таким же.

Вы можете обойти это ограничение, передавая запросы через ваш собственный сервер (но не забывайте защищать его, иначе s [cp] ammers может злоупотребить им)

my.example.com/proxy?url=otherdomain.com/page
1 голос
/ 03 декабря 2008

Теоретически вы можете получить доступ к содержимому iframe, используя стандартное свойство DOM level2 contentDocument . Практически вы, возможно, обнаружили, что большинство браузеров отказывают в доступе к DOM внешнего документа из-за проблем безопасности. Доступ к полной версии DOM AFAIK невозможен (хотя может быть некоторая настройка браузера, чтобы отключить проверку того же домена); для междоменного XHR популярным приемом является перебрасывание данных назад и вперед по iframe и основному документу с использованием идентификаторов фрагментов URL (см., например, эта ссылка ), вы можете использовать ту же технику, но:

  • документ, загруженный в iframe, должен взаимодействовать, а
  • у вас все равно нет доступа к полному документу (вы можете прочитать некоторые параметры, или, может быть, вы можете попытаться URL-кодировать весь документ - но это было бы очень уродливо)
0 голосов
/ 07 февраля 2009

Я только что нашел postMessage метод, представленный в HTML5; это уже реализовано в недавнем браузере (FF3, IE8 и Safari 4). Это позволяет обмениваться сообщениями между любыми объектами Windows внутри браузера. Подробности см. В документации MDC и этом хорошем руководстве Джона Резига.

...