Метод open создает новое окно браузера , аналогично команде "Новое окно" в меню браузера. Обычно это не вкладка, а именно новое окно, но в некоторых браузерах можно настроить то или иное поведение явным образом.
Если параметр strUrl - пустая строка, то в окно будет загружен пустой ресурс about:blank.
В любом случае, загрузка осуществляется асинхронно. Создается пустое окно, загрузка ресурса в которое начнется уже после завершения исполнения текущего блока кода.
Связь между окнами
Метод open возвращает ссылку на новое окно, которая служит для обращения к нему и вызову его методов, если это соответствует ограничениям безопасности Same Origin.
var params = "menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes"
window.open("http://ya.ru/", "Yandex", params)
Если окно с именем winName уже существует, то вместо открытия нового окна, strUrl загружается в существующее, ссылка на которое возвращается. При этом строка параметров не применяется.
В случае, когда окно удалить не удалось, например, оно заблокировано штатными Popup-blocker'ами Firefox/IE - вызов open вернет null.
Проверяйте его, если не хотите лишних ошибок в своих скриптах.
Указание пустого strUrl для существующего имени окна - удобный способ получить ссылку на это окно без его перезагрузки.
Если вы хотите открывать новое окно при каждом вызове open() - используйте для winName специальное значение '_blank'.
Строка параметров
Необязательная строка параметров состоит из списка разделенных запятой настроек нового окна. После открытия окна их уже нельзя будет изменить.
Если строки параметров нет или она пустая, то для нового окна будут взяты параметры по умолчанию.
Если строка параметров указана, то не перечисленные в ней параметры будут отключены(кроме titlebar/close). Поэтому включите в ней свойства, которые нужны.
Если в параметрах не указаны размеры, то новое окно будет по размеру такое же, как последнее открытое.
Если не указана позиция нового окна, то оно откроется со сдвигом в 20-30 пикселей (зависит от браузера) от последнего открытого окна.
Такой сдвиг позволяет посетителю заметить, что открылось новое окно.
Если текущее окно максимизировано, то сдвига не будет: новое тоже будет максимизировано.
Основные кроссбраузерные параметры
Параметры, касающиеся элементов управления окна, могут быть жестко установлены в конфигурации браузера. В этом случае их указание в параметрах open() не даст нужного эффекта.
- left/top
- Расстояние от левой/верхней границы окна операционной системы до границы нового окна. Новое окно не может быть создано за границами экрана
- height/width
- Высота/ширина в пикселях внутренности нового окна, включая полосы прокрутки, если они есть. Минимальное значение: 100
- menubar
- Если этот параметр установлен в yes, то в новом окне будет меню.
- toolbar
- Если этот параметр установлен в yes, то в новом окне будет навигация (кнопки назад, вперед и т.п.) и панель вкладок
- location
- Если этот параметр установлен в yes, то в новом окне будет адресная строка
- directories
- Если этот параметр установлен в yes, то в новом окне будут закладки/избранное
- status
- Если этот параметр установлен в yes, то в новом окне будет строка состояния
- resizable
- Если этот параметр установлен в yes, то пользователь сможет изменить размеры нового окна. Рекомендуется всегда устанавливать этот параметр.
- scrollbars
- Если этот параметр установлен в yes, то новое окно при необходимости сможет показывать полосы прокрутки
var newWin = window.open("http://javascript.ru",
"JSSite",
"width=420,height=230,resizable=yes,scrollbars=yes,status=yes"
)
newWin.focus()
Заметки
Чтобы закрыть окно - используйте вызов window.close:
newWin.close()
Чтобы показать новое окно посетителю - используйте вызов window.focus:
newWin.focus()
dop=window.open("","","width=400,height=150");
.....
dop.document.close();
Есть разница: писать dop.document.close(); или dop.сlose(); ?
Методы window.close (закрыть окно) и document.close (закрыть текущий документ для записи) - разные. Чтобы закрыть окно - используйте window.close
А как можно из дочернего окна получить доступ к элементам формы главного?
window.parent
window.opener
При location=no адресная строка всё равно появляется в Firefox. А можно ли её всё-таки убрать?
Добавлю похожий вопрос к предыдущему посту.
При resizable=no окно можно растянуть в Firefox. А как сделать, чтобы запретить растяжку и оставить заданные width и height?
А можно, сделать когда открывается окно и пред идущее становилось размером 200*200 ?
очень хочу сделать такую фишку
Или чтобы просто вот я кликаю на ссылку открывается новое окно, а на страничка со ссылкой тоже изменится.
Заранее спасибо.
На FireFox никакого действия не оказывает
.
Никак нельзя повлиять чтоб его таки не было?
откройте about:config там есть группа настроек dom.disable_window_open
там где стоит true - фича работать не будет.
это все борьба за "безопасность", будь она не ладна.
одни делают фичи, другие рубят.
вы можете у себя подкрутить, но у других юзеров проблемы будут такие же.
А как из дочернего ещё одно дочернее на новой странице запустить? У меня открывается в том же окошке (первом дочернем). А нужно типа "каскадное расположение окошек: родитель=>дочернее с формой=>дочернее2 с формой ввода. Мне нужно узнать, как открыть в новом окне второе дочернее. Спасибо.
создавайте новое окно с новым именем, если имя такое же - оно замещает существующее. ничего сверхестественного.
У меня window.open используется в следующем виде:
<a href="javascript://" onclick="window.open('Ссылка на сайт');return false;">анкор</a>
можно каким либо образом в onclick="window.open('Ссылка на сайт');return false;" вставить статичная ссылка на сайт + ссылка текущей странички?
Надо для передачи параметра на открываемую страницу.
нашел что можно использовать вот такое: location.href.split('#',1)
Не знаю насколько это правильно , но вроде как работает.
Ссылка приняла вид :
<a href="javascript://" onclick="window.open('Ссылка на сайт'+location.href.split('#',1));return false;">анкор</a>
Обнаружил в IE 8 следующее:
var vWinCal = window.open("", "Calendar", "width=250,height=280,status=no,resizable=no,top=200,left=200");
if (vWinCal)
alert('true');
else
alert('false');
и получаю alert('false'), т.е. vWinCal == null...
кто-нибудь может мне объяснить, что не так?
забыл добавить, что новое окно открывается нормально, но вот как такового объекта не получаю
width=500,height=400 - размер окна
left=450,top=200 - Расстояние от левой/верхней границы окна операционной системы до границы нового окна.
а как, чтобы появившееся страница внутри нового окне была с центра, а не с левой части?
Чтоб страница которая в новом окне координировалась по центру
Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.