Svarga
Moderator | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору обзор форума » (клиентские скрипты » JavaScript) » FAQ по окнам / Новые вопросы по браузерным окнам Вопросы и ответы по окнам FAQ по всплывающим (pop-up) окнам, а также модальным (диалоговым) окнам В этой теме собраны уже задававшиеся на форуме вопросы об открытии новых окон браузера, а также полученные на них ответы. Все новые вопросы по открытию новых окон просьба задавать в этой теме, впоследствии они будут добавлены сюда вместе с ответами. * Открытие картинок в новом окне ? Как узнать размер картинки для того, чтобы открыть под неё окно соответствующего размера? ! Только предварительно загрузив интересующую картинку перед открытием нового окна: Код: var temp=new Image(); temp.src="picture.gif"; | размер будет temp.width и temp.height © Cheery ? Цитата: ! Никак. Даже если убрать все элементы интерфейса и указать в параметрах открываемого окна нулевые размеры-- окно всё равно получится больше, чем 0х0 пикселов: Код: <script>window.open('','','width=0,height=0')</script> | При необходимости скрыть окно его можно поместить под остальные окна или же вынести за пределы экрана (см. ниже). ? Цитата: ! 1. В <body> основного документа добавляем код: Код: <body onLoad="window.open('file.html','','width=300,height=200')"> | 2. В открываемом file.html оформляем ссылку следующим образом: Код: <a href="javascript:opener.window.location.replace('ssylka_kotoruyu_otkryt');window.close()">link</a> | ? Цитата: При открытии окна в параметрах напрямую нельзя указать, чтобы окно открывалось под другими окнами (есть параметр alwaysLowered, но его использование требует сертифицированного скрипта, тем более, что работает он только в 4-м Нетскейпе). Итак, есть два варианта решения: ! 1. Сначала открываем окно, а затем помещаем его под остальные окна (т.е. само открытие окна останется замеченным): Код: <script> function win(){ var wi=window.open("page.html","","width=450,height=350") wi.blur() } </script> | Иногда может понадобиться (всяким нехорошим людям ), чтобы окно, открытое таким образом, нельзя было "поднять" выше остальных окон. Для этого в коде открываемой страницы добавляется: Код: <body onFocus="window.blur()"> | ! 2. Совсем нехорошие люди открывают в подобных случаях окно за пределами экрана, напр.: Код: <script> function win(){window.open("page.html","","top=3000,left= 3000,width=450,height=350")} </script> | В Мозилле и Нетскейпах такое работать не будет, а в Опере, к сожалению, работает как и в MSIE. ? Цитата: ! 1. Если скрипт открытия окна просто находится на странице (т.е. не внутри функции или события), то окно откроется в процессе загрузки страницы, напр.: Код: <script> window.open("page.html","") </script> | ! 2. Скрипт открытия нового окна (как и любой другой) можно вызвать при каком либо событии либо поместить непосредственно в ссылку, напр.: Код: <img src=image.jpg onClick="window.open("page.html","")"> | аналогично для всех остальных событий (onLoad, onUnLoad и т.д.) Код: <a href="javascript:void window.open('page.html','')">открыть окно</a> | ! 3. Если скрипт открытия нового окна помещён в функцию (как в ответе на предыдущий вопрос), то вызвать эту функцию можно (a) по событию, (б) из другой функции либо (в) поместить в ссылку, напр. (для удобства фунция открытия нового окна названа win(), так же, как и в ответе на предыдущий вопрос): а) Код: <img src=image.jpg onClick="win()"> <!-- аналогично для всех остальных событий (onLoad, onUnLoad и т.д.) --> | б) Код: <script> function other(){ // функция win() будет вызвана при вызове данной функции other() win() } </script> | в) Код: <a href="javascript:void win()">открыть окно</a> | ? Цитата: ! Стандартными средствами нельзя, но выход из положения есть ? Цитата: ! Код для открытия окна: Код: <script> function win(){window.open("somebody.html","","width=450,height=350")} </script> | И ссылка, при нажатии на которую окно откроется: Код: <a href="javascript:void win()">link</a> | ? Цитата: и Цитата: ! 1. Открытие нового окна на весь экран: a) человеческий способ: Код: window.open('link.html','','width='+screen.availWidth+',height='+screen.availHeight+',top=0,screenY=0,left=0,screenX=0,scrollbars') | б) для жителей планеты Извр (открывается как попало, потом перемещается в угол и изменяет размер под доступную площадь): Код: var win=window.open('link.html','') win.moveTo(0,0) win.resizeTo(screen.availWidth,screen.availHeight) | ! 2. (только для ИЕ) a) Т.н. Сhannelmode (в MSIE такой режим по F11 вызывается): Код: window.open('file.html','','channelmode') | b) самое жестокое издевательство над пользователем: Код: window.open('file.html','','fullscreen') | c) менее жестокое издевательство: Код: window.open('file.html','','fullscreen,channelmode') | ! 3. Изменение размера существующего окна до размера полноэкранного (не рекомендую — раздражает, лучше вёрстку с самого начала под любое разрешение по-нормальному делать): Код: <body onLoad="window.resizeTo(ширина_окна,высота_окна)"> | ? Цитата: ! Добавляем в тэг <body> страницы атрибут onUnLoad: Код: <body onUnLoad="window.open('http://www...','')"> | ? Цитата: ! Используем такой код: Код: <script>var notex=false</script> <body onUnLoad="if(!notex){window.open('http://','','width=300,height=500')}"> | И в каждую ссылку добавляем: Код: <a href="document.html" onClick="notex=true">link</a> | ? Цитата: ! 1. при открытии окна просто пропускаем в коде параметр resizable: Код: <script> window.open('http://www.domain.com', '', ' top=0,left=0,scrollbars=yes,width=300,height=500'); </script> | или присваиваем ему значение 0 или no: Код: <script> window.open('http://www.domain.com', '', ' top=0,left=0,scrollbars=yes,resizable=0,width=300,height=500'); </script> | ! 2. Запрет на изменение размера любого окна (издевательство нaд посетителем ): Код: <body onResize="window.resizeTo(ширина_окна,высота_окна) onLoad="window.resizeTo(ширина_окна,высота_окна)"> | ? Цитата: ! 1. Предположим, в основном окне есть форма с именем FormMain и textarea с именем TxtMain в ней, а в окне, открытом скриптом из основного окна, есть форма FormPopUp и textarea TxtPopUp. Для передачи данных из главного окна в новое: а)Открываем новое окно таким образом: Код: var win=window.open('http://','','width=400,height=200') | б)И добавляем в главном окне кнопку: Код: <input type=button value="перенести данные" onClick="win.document.FormPopUp.TxtPopUp.value=document.FormMain.TxtMain.value"> | Для передачи данных из нового окна в главное делаем в новом окне кнопку: Код: <input type=button value="перенести данные" onClick="opener.document.FormMain.TxtMain.value=document.FormPopUp.TxtPopUp.value"> | ! 2. Если нужно передать данные новому окну в момент открытия окна, то можно добавить данные к открываемой ссылке, а в открываемом окне извлечь данные из ссылки (т.е. воспользоваться методом get). Простейший случай: открываем новое окно таким образом: Код: eval("window.open('http://site.com/file.html?"+escape("данные_которые_нужно_передать")+"','','width=300,height=200,etc')") | И в новом окне для получения данных используем такой код: Код: if(location.href){alert(unescape(location.search.replace(/\?/,'')))} | В JavaScript нет встроенных методов для получения нескольких переменных/значений из адреса страницы, поэтому при передаче нескольких переменных методом get придётся воспользоваться отдельной функцией для получения названий и значений переменных, к примеру, такой. ? Цитата: ! При открытии окна нужно использовать параметры top, screenY, left, screenX (первые два — вертикальное положение в пикселах относительно верхнего левого угла экрана, вторые два — горизонтальное положение, дублируются значения для кросс-браузерной совместимости): 1. Окно в верхнем левом углу экрана: Код: window.open('link.html','','width=300,height=400,top=0,screenY=0,left=0,screenX=0,scrollbars') | 2. Окно в верхнем правом углу экрана: Код: var w=300 // ширина окна var h=400 //высота окна var wc=screen.availWidth-w window.open('link.html','','width='+w+',height='+h+',top=0,screenY=0,left='+wc+',screenX='+wc) | 3. Окно в нижнем левом углу экрана: Код: var w=300 // ширина окна var h=400 //высота окна var hc=screen.availHeight-h window.open('link.html','','width='+w+',height='+h+',top='+hc+',screenY='+hc+',left=0,screenX=0') | 4. Окно в нижнем правом углу экрана: Код: var w=300 // ширина окна var h=400 //высота окна var wc=screen.availWidth-w var hc=screen.availHeight-h window.open('link.html','','width='+w+',height='+h+',top='+hc+',screenY='+hc+',left='+wc+',screenX='+wc) | 5. Окно по центру: Код: var w=300 // ширина окна var h=400 //высота окна var wc=parseInt((screen.availWidth-w)/2) var hc=parseInt((screen.availHeight-h)/2) window.open('link.html','','width='+w+',height='+h+',top='+hc+',screenY='+hc+',left='+wc+',screenX='+wc) | ? Цитата: ! SSI не понадобится, можно динамически создавать содержимое нового окна: Код: <script> var win=window.open('','','width=50,height=95') win.document.open() win.document.write('<html><meta http-equiv="Content-Type" content="text/html; charset=windows-1251">\nздесь генерим содержимое страницы...\n</html>') win.document.close() </script> | Весь код новой страницы должен быть в одну строку, туда, где на выходе должна будет начинаться новая строка нужно добавить символ конца строки — "\n". ? Цитата: ! В хтмл пишешь Код: <script src=script.js></script> | а вот функция, ее запихивай в файл Код: window.open(URL,"","toolbar=no,width=400,height=400,status=no,scrollbars=no,resize=no,menubar=no") | ? Цитата: ! В коде: Код: <script src=script.js></script> | В script.js Код: function opennewwindow(URL) { window.open(URL,'',"toolbar=no,width=400,height=400,status=no,scrollbars=no,resize=no,menubar=no") } | А вызывать так: Код: <input type=button value="Click here" onclick="opennewwindow('http://forum.ru-board.com')"> | ? Цитата: ! что нить такое Код: OnClick='window.open("new_page.htm","",""); location.href="/new_page2.htm";' |
| Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 03:48 28-06-2004 | Исправлено: Svarga, 03:25 04-10-2004 |
|