|    | 
СИ-БИ техника | КВ техника | УКВ техника | Радиоизмерения | Защита от TVI | Источники питания | Софт | Расчеты | Справочники
Главная arrow Программирование arrow Java arrow Управление окнами Web-обозревателем  

Управление окнами Web-обозревателем

Оглавление
Управление окнами Web-обозревателем
Страница 2
Страница 3
Страница 4
Страница 5
Страница 3 из 5

Можно также создать в программно созданном окне переменную и поместить в нее экземпляр объекта window, соответствующий создающему окну. Но это очень неудобно, поскольку мы можем получить доступ к объявленным в созданном программно окне переменным и функциям только после окончания загрузки страницы в этом окне. Так что лучше этим способом не пользоваться.

Народ замечает

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

Как изменить размеры и местоположение окна?

Проблема

Я хочу установить размеры и местоположение окна Web-обозревателя из сценария. Можно ли это сделать?

Решение

Специально для этого предназначены четыре метода объекта window. Все они перечислены далее.

moveBy(<Смещение по горизонтали>, <Смещение по вертикали>) — смещает окно на заданное количество пикселов вправо и вниз. Для перемещения влево и вверх нужно задать отрицательные значения соответствующих параметров.

moveTo(<Координата х>, <координата y>)—перемещает окно в точку экрана с заданными координатами.

resizeBy(<Приращение по горизонтали>, <Приращение по вертикали>) — увеличивает размеры окна на заданное количество пикселов. Для уменьшения размеров окна нужно задать отрицательные значения соответствующих параметров.

resizeTo(<Paзмep по горизонтали>, <Размер по вертикали>) —задает размеры окна.

Народ предупреждает!

Нужно иметь в виду, что многие Web-обозреватели (в частности, Opera и Firefox) позволяют блокировать Web-сценарии, перемещающие окна и изменяющие их размеры.

Пример

Вот HTML-код страницы, автоматически разворачивающей окно Web-обозревателя на весь экран.

<HTML> <HEAD»

<TITLE>Ha весь экран</TITLE> </HEAD> <BODY>

<SCRIPT TYPE="text/javascript"> window.moveTo(0, 0);

window.resizeTo(screen.availWidth - 1, screen.availHeight - 1); </SCRIPT> </BODY> </HTML>

Народ предупреждает!

Если для определения размеров экрана мы собираемся пользоваться свойствами объекта screen, то должны будем иметь в виду, что эти свойства возвращают количество пикселов по горизонтали и вертикали, а нумерация пикселов начинается от 0 и заканчивается величиной <значение соответствующего свойства> - 1. Именно поэтому в приведенном выше примере автор уменьшил параметры метода resizeTo объекта window на единицу.

Как мне получить координаты и размеры окна?

Проблема

Мне нужно получить координаты и размеры окна Web-обозревателя. Это возможно?

Решение

В принципе, возможно, но придется считаться с несовместимостью различных программ Web-обозревателей. Давайте поговорим об этом. И начнем с координат окна Web-обозревателя — их получить проще.

За координаты окна "отвечают" свойства screenLeft и screenTop объекта window. Первое свойство возвращает горизонтальную координату левого верхнего угла окна Web-обозревателя, второе — его вертикальную координату. Эти свойства поддерживаются Internet Explorer и Opera.

Чтобы выяснить координаты окна в Firefox, нам придется обратиться к свойствам screenx и screenY. Эти свойства также принадлежат объекту window.

Перейдем к размерам окна. Здесь лучше всего себя показывают Opera и Firefox— они предоставляют свойства outerwidth и outerHeight объекта window, возвращающие соответственно ширину и высоту окна.

К сожалению, вычислить размеры окна в Internet Explorer не представляется возможным. Можно только узнать размеры клиентской области окна, воепользовавшись свойствами clientwidth и clientHeight объекта body, представляющего тело страницы и вложенного в объект document.

Народ замечает

Да, Internet Explorer— замечательная программа, но не без досаднейших огрехов. Ну что стоило разработчикам добавить в его объект window какие-нибудь свойства screenwidth и screenHeight!.. Так ведь не добавили...

Существует, правда, "финт ушами", позволяющий все-таки узнать размеры окна. А именно добавить к значению свойства clientwidth 10 пикселов (примерно такой будет толщина рамок окна), а к значению свойства clientHeight — 100 пикселов (поправка на толщину рамки окна, его заголовка, главного меню и панелей инструментов). Эти значения выяснены автором книги экспериментально.

Как выровнять окно по краю экрана?

Проблема

Мне нужно выровнять окно Web-обозревателя по определенному краю экрана. Как это сделать?

Решение

Использование универсальной функции jspsAiignwindow (листинг 4.1). Формат ее вызова таков:

jspsAlignWindow(<Oкно>, [<Край экрана>[, <Растягивать окне>]]);

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

Вторым параметром этой функции передается числовое значение, задающее край экрана, по которому нужно выровнять окно. Вот все доступные значения этого параметра (приведены имена псевдоконстант, значения которых можно найти в листинге 4.1):

  jsps_aw_left — по левому краю;

  jsps_aw_lefttop — по левому и верхнему краю экрана (т. е. поместить окно в его левый верхний угол);

  jsps_aw_top — по верхнему краю;

  jsps_aw_righttop — по правому и верхнему краю (в правый верхний угол);

  jsps_aw_right — по правому краю;

jsps_aw_rightbottom— по правому и нижнему краю (в правый нижний угол);

jsps_aw_bottom — по нижнему краю;

  jsps_aw_leftbottom — по левому и нижнему краю (в левый нижний угол);

  jsps_aw_center — по центру;

jsps_aw_full — полное выравнивание (т. е. окно будет растянуто на весь экран).

Если второй параметр не указан, окно будет выровнено по центру, как если бы мы указали значение jsps_aw_center.

Третий параметр функции jspsAlignwindow позволяет указать, растягивать ли окно вдоль края экрана, по которому выполняется выравнивание, так, чтобы оно заняло его полностью. Если указано значение true, окно будет растянуто; значение false предписывает оставить размеры окна неизменными. Пропуск третьего параметра эквивалентен указанию значения false.

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

jsps_aw_top, jsps_aw_right и jsps_aw_bottom. В остальных случаях он будет проигнорирован.

Функция jspsAiignwindow не возвращает значения.

Народ предупреждает!

Максимизированные окна функция jspsAiignwindow выравнивает некорректно. И это понятно — если окно развернуто на весь экран, его просто невозможно "прижать" к какому-то одному его краю.

Листинг 4.1. Функция jspsAiignwindow. выполняющая выравнивание окна Web-'Обозрсвателя вдоль заданного края экрана

var JSPS_AW_LEFT = 0;

var JSPS_AW_LEFTTOP = 1;

var JSPS_AW_TOP = 2;

var JSPS_AW_RIGHTTOP = 3;

var JSPS_AW_RIGHT = 4;

var JSPS_AW_RIGHTBOTTOM = 5;

var JSPS_AW_BOTTOM = 6;

var JSPS_AW_LEFTBOTTOM = 7;

var JSPS_AW_CENTER = 8;

var JSPS_AW_FULL = 9;

function jspsAlignWindow(windowObject, edge, doResize) {

if (typeof(edge) == "undefined") edge = JSPS_AW_CENTER; if (!doResize) doResize = false;

var piObj = jspsGetProgramlnfo(); var rightmostPixel = screen.availwidth - 1; var bottommostPixel = screen.availHeight - 1;

// Здесь вьшолняется коррекция размеров экрана для Opera с учетом // того, что окна в этом Web-обозревателе открываются внутри // главного окна. Значения коррекции установлены автором // экспериментально

if (piObj.programName == JSPS_GPI_OPERA) { var correctionX = 10; var correctionY =90; } else { var correctionX = 0; var correctionY = 0; } if ( (.piObj.programName == JSPS_GPI_MSIE) ||(piObj.programName == JSPS_GPI_OPERA)) { var winX = window.screenLeft; var winY = window.screenTop; } else { var winX = window.screenX; var winY = window.screenY; } if (piObj.programName == JSPS_GPI_MSIE) { var winWidth = window.document.body.clientWidth + 10; var winHeight = window.document.body.clientHeight + 100; } else {

var winWidth = window.outerWidth; var winHeight = window.outerHeight; } switch (edge) {

case JSPS_AW_LEFT: if (doResize) { windowObject.moveTo(0,0)

windowObject.resizeTo(winWidth, bottommostPixel -correctionY) ;

} else

windowObject.moveTo(0, winY - correctionY); break; case JSPS_AW_LEFTTOP:

windowObject.moveTo(0, 0); break ; case JSPS_AW_TOP: if (doResize) { windowObject.moveTo (0, 0) ;

windowObject.resizeTo(rightmostPixel - correctionX,winHeight) ; } else

windowObject.moveTo(winX - correctionX, 0) ; break; case JSPS_AW_RIGHTTOP:

windowObject.moveTo(rightmostPixel - winWidth - correctionX,0); break; case JSPS_AW_RIGHT: if (doResize) {

windowObject.moveTo(rightmostPixel - winWidth -correctionX, 0) ;

windowObject.resizeTo(winWidth, bottommostPixel -correctionY) ; } else

windowObject.moveTo(rightmostPixel - winWidth - correctionX,winY - correctionY) ; break; case JSPS_AW_RIGHTBOTTOM:

windowObject.moveTo(rightmostPixel - winWidth - correctionX,bottommostPixel - winHeight - correctionY); break; case JSPS_AW_BOTTOM: if (doResize) { windowObject.moveTo(0, bottommostPixel - winHeight -correctionY) ;

windowObject.resizeTo(rightmostPixel - correctionX,winHeight); } else

windowObject.moveTo(winX - correctionX, bottommostPixel -winHeight - correctionY) ; break; case JSPS_AW_LEFTBOTTOM:

windowObject.moveTo(0, bottommostPixel - winHeight -correctionY); break; case JSPS_AW_CENTER:

windowObject.moveTo((rightmostPixel - winWidth - correctionX) /2, (bottommostPixel - winHeight - correctionY) / 2); break; case JSPS_AW_FULL:

windowObject.moveTo(0, 0);

windowObject.resizeTo(rightmostPixel - correctionX,bottommostPixel - correctionY); break; } }

Внимание!

Листинг 4.1, содержащий объявление функции jspsAlignWindow, использует также функцию jspsGetPrograminfо, чье объявление приведено в листинге 3.1.

Хорошая идея!

Поместите объявление этой функции в файл сценариев alignwindow.js. Впоследствии, чтобы использовать ее, достаточно будет просто подключить к Web-странице этот файл сценариев с помощью тега:

<SCRIPT SRC="alignwindow.js"></SCRIPT>

Пример

jspsAlignWindow(window, JSPS_AW_BOTTOM, false);

Это выражение выровняет текущее окно Web-обозревателя по нижнему краю экрана без растягивания.

Как активизировать нужное окно?

Проблема


« Пред. - След. »


RLBN.ru - Электроника и компьютеры

0.1479
Hosted by uCoz