Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить содержимое iframe 
V
    Опции темы
inlanger
  Дата 9.6.2008, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.6.2008

Репутация: нет
Всего: нет



Помогите, пожалуйста, с решением такой проблемы...
Есть страница с ифреймом. Необходимо получить и обработать "на лету" содержимое этого ифрейма. Именно то содержимое, которое сейчас на экране у пользователя(то есть к серверу обращаться нельзя).

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

В правмльном направлении я мыслю? И как это реализовать(javascript часть)?

Заранее огромное спасибо!
PM MAIL   Вверх
krundetz
Дата 9.6.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Код

frames[0].document.body.innerHTML



--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
inlanger
Дата 9.6.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.6.2008

Репутация: нет
Всего: нет



И куда это?
Я новичёк в javascript... Мне, пыхаписту, трудно понять этот код smile
PM MAIL   Вверх
krundetz
Дата 9.6.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



У вас есть iframe как я понял он у вас невидимый. В него загружена некая информация. Приведенный код вернет вам эту информацию. Тоесть содержимое.

Код

<script>
alert(frames[0].document.body.innerHTML);
</script>


Вставте этот код в канец вашего файла с iframe и поймете что он возвращает.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
inlanger
Дата 9.6.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.6.2008

Репутация: нет
Всего: нет



Выскакивает пустой алерт...
PM MAIL   Вверх
krundetz
Дата 9.6.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Значит либо у вас несколько iframe на странице или у вас туда ничего не подгружено изначально.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
inlanger
Дата 9.6.2008, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.6.2008

Репутация: нет
Всего: нет



Код

<iframe name=ifr id=ifr src=http://forum.vingrad.ru/forum/topic-215738.html></iframe>
 <script>
alert(frames[0].document.body.innerHTML);
</script>


и ничего вообще не происходит... 

з.ы. пустой алерт это я уже сам намудрил.

PM MAIL   Вверх
krundetz
Дата 9.6.2008, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Рекомендую ознакомится вот с этой статьей: http://www.kruglov.ru/articles/nontrivialjs/#iframe

Тоесть вот такой вариант:
Код

<iframe name=ifr id=ifr src=file.html></iframe>
 <script>
alert(frames[0].document.body.innerHTML);
</script>

будет работать при условие что file.html загружен с того же ресурса с которого загружен основной файл.

Добавлено @ 23:01
А вообще помоему вы хотите получить нечто готовое не прилогая усилий так какк все что я расказал не является какойто нетривиальной вешью и выдается в числе первых ссылок поисковыми системами по запросу iframe javascript. Сами же вы даже видимо ничего и не пробовали найти.

Это сообщение отредактировал(а) krundetz - 9.6.2008, 23:02


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Ghirik
Дата 9.6.2008, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 5
Всего: 20



Например так

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>name2</title>
<script type="text/javascript">
<!--
$fr = function(idIframe,mydiv) {
    if(/*@cc_on 1 | @*/0) {
        return document.getElementById(idIframe).contentWindow.document.getElementById(mydiv);
    }
    else{
        return document.getElementById(idIframe).contentDocument.getElementById(mydiv);
    }
}
//-->
</script>
</head>
<body>
<iframe id=I1 name=I1 style="display: none" src="index.htm" width="300" 
height="183">
</iframe>
<input type=button value=Узнать name=b1 onclick="alert($fr('I1','tab1').getAttribute('width'))">
</body>
</html>


Выдаст ширину таблицы (id=tab1) в фрейме I1

Добавлено через 2 минуты и 11 секунд
Если, конечно, в фрейме содержимое вашего сайта.


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
sergeyrg
Дата 4.4.2012, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 22.12.2011

Репутация: нет
Всего: нет



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

а на любые попытки достучаться до контента фрейма
(типа var ifr=parent.window.frames['ifr'].document.getElementById('restable').innerHTML;)

 получаю примерно такой ответ: 
Ошибка: Permission denied to access property 'document'

:((((

Добавлено через 5 минут и 23 секунды
вот нарыл в инете мысль:

На своем домене сделать страницу-proxy. Т.е. по запросу к этой странице с параметром url — ваш серверный код (php, aspx, ...) будет слать запрос на указанный url и возвращать содержимое. Т.о. контент страницы любого url будет доступен с вашего домена. Теперь запрет на доступ к контенту снят, т.к. запрос на саму страницу и содержимое iframe — будут идти на один домен, что не является нарушением безопасности при попытке обращения через JS.
У данного решения существует ряд устранимых недостатков.

вопрос, как это сделать? да ещё так чтобы можно было форму по посту кинуть, и не просто форму, а с капчей заполненной.

мож кто примерчик кода такой прокси редиректилки покажет?

Добавлено через 8 минут и 31 секунду
только желательно без курла - ибо курл картинку капчи при эхе результата перерисовывает другую
PM MAIL   Вверх
sergeyrg
Дата 6.4.2012, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 22.12.2011

Репутация: нет
Всего: нет



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

у меня задача была такая: 
нужно было получать данные с чужого сайта, на каждый поиск вводилась капча; 
с помощью курла удалось только симитировать заполнение формы запроса, капчу не получилось подтверждать.
мне нужно было по-максимуму автоматизировать, т.к. на количество запросов около 1000 каждый клик усложняет задачу.

я сделал так:

на моей странице циклически перебираются поисковые запросы, каждый запрос выводит в ифрейме форму ввода капчи, я ввожу буковки с картинки, подтверждаю, потом в этом же ифрейме показывается результат поиска

за пределами ифрейма кнопочка которая просто перегружает страницу и уходит на следующий запрос.

каждая такая страница сама по себе сохраняется во временных файлах со всем контентом, включая содержимое ифрейма, с одинаковыми именами (это у меня в конкретной ситуации, может быть и по-другому) типа "имя_файла[1].htm","имя_файла[2].htm" и т.д. (я пользовал ИЕ, может в других браузерах по-другому)

мне остается только свалить это всё в отдельную папку, и отдельным перебрать в цикле и распарсить нужные мне данные.

рад если помог, мне самому даже мелкий совет иногда экономит недели работы.
PM MAIL   Вверх
Aliance
Дата 9.4.2012, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



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

function getFrameDocument (fram) {
 var d = (fram.contentDocument) ? fram.contentDocument : ((fram.contentWindow) ? fram.contentWindow.document : null);
 return d;
}

PM MAIL WWW ICQ Skype   Вверх
sergeyrg
Дата 9.4.2012, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 22.12.2011

Репутация: нет
Всего: нет



я пробовал подобные схемы, но меня не пускает дальше .document ни ИЕ ни ФФ
на parent.window.frames['ifr'].document уже ошибка доступа, 
так же и на
..document.frames.ifr.document
..window.frames['ifr'].contentWindow
..document.getElementById("ifr").contentWindow
я пробовал эту дыру безопасности микрософта в ИЕ - не работает, и в ИЕ6 и в ИЕ7
доступа нет:
 "Отказано в доступе" в ИЕ
и
Permission denied to access property в ФФ

если есть рабочий пример, покажите плиз, мож я что не так делаю....


PM MAIL   Вверх
Aliance
Дата 9.4.2012, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Дай-ка догадаться, видимо ты пытаешься получить доступ к элементам фрейма с другого сервера?  smile 
Вот тут я писал о невозможности такого действия:

Цитата

ЧЕГО ДЕЛАТЬ НЕЛЬЗЯ!!!
Получить доступ к свойствам документа из фреймов, доставленных с других серверов или домена. Политика безопастности не позволит данную операцию.

PM MAIL WWW ICQ Skype   Вверх
sergeyrg
Дата 9.4.2012, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 22.12.2011

Репутация: нет
Всего: нет



про "нельзя" мне все поисковые сервера неделю шептали,
а мне "надо", и я нашел способ всё это обойти, кривовато - но свою задачу я выполнил ;)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0553 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.