Доступ к тексту документа из <iframe>, размещенного в другом домене - PullRequest
1 голос
/ 02 октября 2009

Я реализую «виджет», который будет включен на страницах статей / историй стороннего веб-сайта. Этот виджет живет в

Я не могу получить доступ к DOM родительской страницы из-за ограничений междоменной безопасности, и в этом заключается проблема. Я могу разместить практически любой код, который мне нужен, на родительской странице (например, некоторый JavaScript, который анализирует содержимое, которое мне нужно), и

Моей первоначальной мыслью было передать содержимое страницы с родительской страницы в мой атрибут

<iframe src="http://www.mydomain.com/widget.html?page_content=This is some page content."></iframe>

Я мог бы использовать на родительской странице для сбора текста, а затем document.write

Однако мне нужно собрать 8 КБ текста с родительской страницы, и я понимаю, что запросы GET имеют ограничение в 1 КБ - это правда? Если нет или я могу настроить этот лимит на моем сервере, проблема, скорее всего, решена.

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

У меня есть jQuery, доступный в моем виджете, но я не могу полагаться ни на что, кроме простого JavaScript на родительской странице.

Ответы [ 3 ]

0 голосов
/ 16 декабря 2009

На самом деле, вы можете использовать для этого атрибут name, в нем достаточно места для данных.

На странице хостинга вы сначала создаете iframe, устанавливаете его свойство .name для хранения необходимых данных, а затем устанавливаете свойство .src для загрузки содержимого сайта. Теперь у него будет доступ к собственному имени и, следовательно, к данным.

Возможно, что хост-сайту потребуется сначала установить iframes .src на локальную страницу, которая будет захватывать данные родительских документов, помещать в свойство .name и перенаправлять на целевой сайт.

0 голосов
/ 04 мая 2010

Если у вас есть контроль над обоими доменами, вы можете попробовать междоменную библиотеку сценариев, такую ​​как EasyXDM , которая оборачивает причуды между браузерами (включая свойство имени, о котором упоминал Шон выше) и обеспечивает легкий использовать API для связи в клиентском скрипте между различными доменами, используя лучший доступный механизм для этого браузера (например, postMessage , если доступно, другие механизмы, если нет).

Предупреждение: вам нужно иметь контроль над обоими доменами, чтобы заставить его работать (где «контроль» означает, что вы можете размещать статические файлы на обоих из них). Но вам не нужно никаких изменений кода на стороне сервера.

Еще одна оговорка: здесь есть последствия для безопасности - убедитесь, что вы доверяете сценарию другого домена!

0 голосов
/ 02 октября 2009

Если вас беспокоит слишком много данных для запроса GET, используйте вместо этого запрос POST. Вы можете попробовать что-то вроде ответа на этот вопрос: «Как вы публикуете в Iframe?» . Затем вы можете поместить данные в скрытую текстовую область и отправить форму с помощью JavaScript на родительской странице.

...