У меня была задача: открыть картинку в новом окне .
Казалось бы, ничего проще нет. Но, внесённые шефом нюансы, сделали с задачи настоящую проблему.
Вот эти нюансы:
Размеры нового окна должны быть точно такими же, как и размеры картинки.
В окне не должно быть ни каких отступов (только картинка)
Окно должно иметь свой индивидуальный заголовок (т.е. нормальное русское название, напр. "Пейзаж №123 - Microsoft Internet Explorer")
Окно должно открываться с помощью скрипта на JavaScript (других сервисов не было), притом 1-2 функциями.
Этот скрипт должен работать в браузерах IE5 >, NN5 >, Opera6 >, Mozilla6>
Скрипт не должен загружать отдельных HTML файлов для каждой картинки (только: ссылка > скрипт > окно с рисунком).
Каждый новый рисунок должен открываться в своем новом окне.
По такому запросу поисковая машина Яndex ничего не нашла и я взялся писАть свой скрипт.
ПисАл долго и нудно, и вот что получилось:
Этот скрипт, возможно, не самый оптимальный, но он справляется с поставленными задачами. Как оно работает? Переменные:
rand_id — индивидуальный id каждого нового окна.
outf — HTML-код главного (последнего) окна с картинкой и с тайтлом.
Процесс:
Питаемся определить размеры рисунка:
img1=new Image();
img1.src=imgf;
Отсюда, img1.height — высота , img1.width — ширина.
Если рисунок открывается впервые , то браузер сразу не может определить его размеры, поетому:
Открываем предварительное новое popup-окно iwin , с минимальным размером 100х100 и именем rand_id .
Пишем в него (с помощью iwin.document.write("... ) HTML-код, в котором присутствует внутренняя функция JavaScriptа и, собственно, наш рисунок.
На данном этапе мы пока не знаем размеров рисунка.
При загрузке рисунка происходит событие onload . Воспользовавшись этим — вызываем нашу внутреннюю функцию onload='imo(this);' , которая...
Открывает второе popup-окно (код открытия берем с переменной iopen ), с размерами нашей картинки. Как мы их узнали?
Передали в функцию параметр this . И теперь в функции, соответственно, высота — img1.height , ширина — img1.width
Той же функцией, загружаем HTML-код outf в это второе окно (с помощью iwin.document.write(outf) )
Даем фокус первому окну.
Закрываем второе.
Готово.
Если рисунок уже нами открывался, то нам известны его размеры, поетому сразу выполняем код открытия главного (последнего) окна, функцией eval(iopen) .
Выводы: в принципе, вся прелесть заключается в том, чтобы определить размер картинки, а потом открыть окно такого размера. Плюс, фирменные примочки: вписуем тайтл, убираем отступы.
Если кто-либо изобрел что-то лучше — дайте знать. Создано: 8.09.2004
Автор: Stipuha