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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с onUnload в борьбе с активными фреймами, чужих сайтов 
V
    Опции темы
Black
  Дата 29.3.2006, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


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

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



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

Как это работает смотрим здесь:
http://blackmedia.ru/work/page.php

На странице вы видите две ссылки.

Нажмите на вторую ссылку и вы увидите как скрипт должен работать.
Это будет работать в IE 6.0, Opera v8 и выше , Firefox v1 и выше

Но вот первая ссылка будет корректно работать только в браузере Opera
В браузере FireFox первая ссылка покажет ссылку на файл, но вот в новом окне всплывающего окна не будет.
А в браузере IE вообще ничего не произойдет после перехода по первой ссылке.

Почему?

Видимо потому что, по первой ссылке происходит переход на http://yandex.ru/, который в своём исходном HTML-коде содержит следующий занятный JavaScript-код:

Код

onload="if( self.parent.frames.length != 0 ) self.parent.location = document.location;"


Этот код, как вы уже поняли, разрушает все iframe (фреймы), если сайт в них был открыт.
Но я использую именно iframe в своем скрипте для показа нужной страницы.

Почему? Потому что надо как-то отследить полную загрузку страницы (а отследить загрузку страницы в iframe не составляет труда, используем onload) и затем уже в родительское окно отправить команду на показ ссылки.

Хотелось бы спросить, может кто-нибудь придумает, как же все-таки заставить открыть ссылку на сайт, который содержит код, который разрушает все iframe, если он был в них открыт и после этого показать ссылку на файл?

То есть заставить браузеры IE и FireFox вести себя также как и браузер Opera при нажатии на первую ссылку.

P.S. : пытаюсь использовать событие onunload у тега body, чтобы отследить, что начинается разрушение iframe и переброс на url открываемого сайта, но это, видимо, работает только в браузере Opera.

Зачем это надо?
Для показа рекламы на сайте с файловым архивом. То есть сначала смотрим рекламу, а затем получаем ссылку на скачивание файла.

Вообщем, если в двух словах:

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

Но что-то мне кажется, что сделать что-либо невозможно!

Возможно, кто-то придумает другую реализацию данного скрипта без использования фреймов?


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Wolf1994
Дата 30.3.2006, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

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



Не совсем понял суть проблемы. Если это будет реклама сайтов, то нельзя договорится с рекламируемым сайтом, чтобы он, например, отслеживал Refferer и не использовал для сайта-рекламщика этот механизм, или вообще не использовал?
PM MAIL WWW   Вверх
Black
Дата 30.3.2006, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


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

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



Wolf1994, необходимо реализовать программо, а не договариваться с кем-то smile


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Ciber SLasH
Дата 30.3.2006, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

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



Можно обнулить фреймы: self.parent.frames = null;
А страницу с IFRAME-ом генери так:
Код

<html>
<head>
<script type='text/javascript'>
self.parent.frames = null;

function myFunc() {
document.getElementById('wait_please').style.display = 'none';
document.getElementById('display_link').style.display = 'block';
window.opener.document.getElementById('f_block_2').innerHTML = '<a style=\'color: red;\' title=\'Ссылка на скачивание файла\' href=\'http://www.lala.ru/file.zip\'>http://www.lala.ru/file.zip</a>'
}
</script>
</head>

<body>
<div id='wait_please' style='display: block;' class='splash'>Дождитесь полной загрузки этого окна, после чего здесь будет показана ссылка на скачивание файла...</div>
<div id='display_link' class='splash' style='display: none;'>Ссылка на загрузку файла: <a style='color: red;' title='Ссылка на скачивание файла' href='http://www.lala.ru/file.zip'>http://www.lala.ru/file.zip</a></div>
<iframe onload='myFunc()' style='position: absolute; top: 0px; left: 0px;' src='http://yandex.ru/' frameborder='0' marginheight='0' marginwidth='0' height='100%' width='100%'></iframe>
</body>
</html>

PM   Вверх
Wolf1994
Дата 30.3.2006, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

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



Могу предложить "грязное" решение. Считать документ на удалённом сервере средствами PHP, просканировать его, изменив все src и ссылки с локальных на абсолютные, убрать любые ненужные элементы, вроде скрипта Яндекса, и, просто вывести на страницу, безо всяких ифрэймов.
PM MAIL WWW   Вверх
Black
Дата 30.3.2006, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


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

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



Wolf1994, нужен именно переход, т.е. уникальный хост. Если будем считывать, то все будет с одного IP-адреса - с IP-адреса сервера.

Ciber SLasH, используя твой совет удалось заставить скрипт работать в FireFox.
В IE все равно перебрасывает на Яндекс, но тем не менее, теперь отобразить ссылку скрипт успевает.

Поэтому, можно сказать, что вопрос решен.
Добавлено @ 01:39
Видимо IE не врубается в

Код

self.parent.frames = null;



--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
12345c
Дата 30.3.2006, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

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



Black, а модальный диалог в IE по onUnload позволит задержать ссылку в модальном окне на долгое время? (Которая тоже делается в своём фрейме, если надо, чтобы работала навигация.)
PM WWW   Вверх
Иль
Дата 14.4.2006, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

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



Black, если еще чего нароеш, черкани в форуме, плз.
Про уязвимость через iframe в ИЕ знаешь видимо?


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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