Скопировать HTML-контент из iframe в div (ajax)?

Предположим, мой браузер загружает iframe с <iframe src="test.html">

Могу ли я, используя ajax, загрузить содержимое test.html в div на главной странице html?

Эта идея - мое решение того факта, что я на самом деле пытаюсь преодолеть ограничение с отправкой ajax на удаленные хосты. План состоит в том, чтобы сгенерировать динамическую страницу с iframe размером 0, которая отправляет запрос отчета на удаленный хост. Затем, после загрузки страницы (и содержимого iframe) я скопирую содержимое iframe в div с помощью JS.

Чаевые приветствуются,

Спасибо, Максим.


person Maxim Veksler    schedule 21.01.2010    source источник


Ответы (5)


Нет, не можешь.

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

Единственное, что мне известно о том, что вы можете надежно загружать из другого домена, это сценарий, который JSONP использует.

person Guffa    schedule 21.01.2010
comment
облом ... Я был уверен, что, поскольку я могу использовать iframe, все мои проблемы с ajax решены. Спасибо за объяснение. - person Maxim Veksler; 22.01.2010
comment
@Maxim: Забавно, я действительно думал о том же ранее сегодня, в течение нескольких секунд, прежде чем понял, что я не смогу получить данные, которые я загрузил ... :) - person Guffa; 22.01.2010

Могу ли я, используя ajax, загрузить содержимое test.html в div на главной странице html?

Да (поскольку ваш пример имеет относительный URI и находится на том же хосте)…

Эта идея - мое решение того факта, что я на самом деле пытаюсь преодолеть ограничение с отправкой ajax на удаленные хосты.

… и нет. Вы по-прежнему не можете читать данные с удаленных хостов.

person Quentin    schedule 21.01.2010

Я уверен, что кто-то поправит меня, если я ошибаюсь, но я считаю, что выполнение сценариев через границы домена ограничено. Ты пробовал это? Вот функция, которая может помочь.

function insertDivFromFrame(divname, framename) {
    var frame = document.getElementById(framename);
    var d = frame.contentWindow || frame.contentDocument;
    if (oDoc.document) {d = d.document;}
    document.getElementById('yourdiv').innerHTML = d.body.innerHTML;
}

Я не уверен, что этот код работает ... см. http://xkr.us/articles/dom/iframe-document/, чтобы получить дополнительную помощь по этому поводу.

person ErikE    schedule 21.01.2010

... однако вы можете создать запрос AJAX для локального хоста и получить информацию с удаленного сервера (как описано в здесь).

person St.Woland    schedule 21.01.2010

Если вы напишете файл php / perl / etc. скрипт для вывода содержимого документа из другого домена, он предоставит вам доступ к содержимому, поскольку результирующая страница будет рассматриваться javascript как принадлежащая вашему домену. Если вы не знакомы с какими-либо языками сценариев на стороне сервера, я уверен, что вы сможете найти сценарий, который сделает это за вас, выполнив простой поиск в Google.

Удачи.

person James    schedule 25.01.2010
comment
Это то, что мы, вероятно, в конечном итоге будем делать, используя Apache HttpClient в качестве простого прямого прокси. У меня все еще есть сомнения относительно лучшего / лучшего прокси-решения: программный прокси-сервер webapp против прокси-сервера сервлетов против mod_proxy? - person Maxim Veksler; 26.01.2010