Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Не могу узнать текущую ссылку с IFRAME


Автор: Reverent 15.6.2008, 12:07
Добрый день уважаемые форумчани.

Столкнулся с такой проблемой при разработке системы полуавтоматической рассылки объявлений по доскам.

У меня есть база данных содержащая ссылки на доски объявлений. Когда пользователь заходит в систему появляется IFRAME в котором загружаются ссылки этих досок объявлений. Ссылка ведет изначально на выбор раздела, в который попадет объявления, вот как здесь:
http://ads.posad.org/cgi-bin/do/index.cgi?a=1 

Затем пользователь выбирает раздел (все это происходит в том же IFRAME моей системы) и появляется вот такая страница:
http://ads.posad.org/cgi-bin/do/add.cgi?c=4

В моей системе есть форма, в которой уже все поля заполнены, пользователю лишь нужно нажать на кнопку «Послать» и объявление должно отправиться. Но вот тут то я и столкнулся с проблемой.

Я назначил вот такой параметр для тэга FORM
<FORM  method="post" target="здесь_имя_iframe" name="message">
Но, к сожалению, форма посылаться не на страницу, которую выбрал пользователь в IFRAME, а на текущую страницу, причем она открывается в этом IFRAME.

Тогда я решил, что действую не правильно, мне нужно обозначать свойство action для тэга IFRAME. Но я не могу получить нужную мне ссылку с IFRAME. Начинаю действовать так:

document.getElementById("blocks").src – но этот метод не действует т.к. он выдает ссылку на изначальную страницу (в нашем примере http://ads.posad.org/cgi-bin/do/index.cgi?a=1 ) и не коем разе не следит этот параметр за передвижением пользователя

Тогда пробую сделать вот так:
document.getElementById("blocks").contentWindow.location.href
Но скрипт говорит, что не прав доступа!

Что же мне делать? Как мне решить проблему, как можно послать эту форму на этот IFRAME заранее не зная ссылку, которая является текущей для этого IFRAM’a?

Автор: krundetz 15.6.2008, 18:55
Боюсь что никак так как браузеры блокируют обращение к контенту загруженному сдругих доменов в iframe. Возможно поможет вариант когда вы будете пропускать все через свой сервер и выбирать необходимый вам url там

Автор: Sannis 15.6.2008, 22:51
Reverent, Вам просто нужно дополнить вашу базу урлов ещё одним, который прописан в Action у формы отправки и, возможно, добавить значение hidden полей формы. Для указанной вами страницы http://ads.posad.org/cgi-bin/do/add.cgi?c=4 это будет http://ads.posad.org/cgi-bin/do/add.cgi&c=4&a=1. Думаю теперь будет несложно отправлять свою форму по нужному адресу? smile

Автор: Reverent 16.6.2008, 05:54
Цитата(Sannis @ 15.6.2008,  22:51)
Reverent, Вам просто нужно дополнить вашу базу урлов ещё одним, который прописан в Action у формы отправки и, возможно, добавить значение hidden полей формы. Для указанной вами страницы http://ads.posad.org/cgi-bin/do/add.cgi?c=4 это будет http://ads.posad.org/cgi-bin/do/add.cgi&c=4&a=1. Думаю теперь будет несложно отправлять свою форму по нужному адресу? smile

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


Гениальные идеи приходят ночью! Я решил реализовать следующее. Сделал IFRAME со страницей с моего сервера. На нем находилась функция PHP которая соединялась по сокету со страницей и считывала ее. Затем сделал парсер который делает вот так:

Берет вот это
<a href="http://blablabla.ru/add.php?a=1">
и переводит вот в это:
<a href="javascript:linkGo('http://blablabla.ru/add.php?a=1')">

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

Когда же пользователь жмет на ссылку происходит переход в эту функцию которая получает в значении выбранную ссылку. Функция сохраняет ее в глобальной переменной и запускает тот же самый скрипт PHP только теперь с выбранной ссылкой. Таким образом круг замкнулся - пользователь может ходить по сайту, даже не подозревая что это уже не совсем тот сайт.

Затем все элементарно, когда пользователь жмет заполнить форму, функция считывает глобальную переменную с текущей ссылкой и подставляет ее в поле action, форма посылается в тот же IFRAME - на выходе получаем ответ от сайта, прошла ли форма или была ошибка.

Все оказалось элементарно и просто! ;) - думаю мой бриф комунибудь в будущем поможет

Автор: krundetz 16.6.2008, 08:35
Reverent я помоему как раз об этом и говорил

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)