СпливаÑÑе вÑкно Ñ Ð¾Ð´Ð½Ð¸Ð¼ Ñз найÑÑаÑÑÑÐ¸Ñ Ð¼ÐµÑодÑв Ð¿Ð¾ÐºÐ°Ð·Ñ Ð´Ð¾Ð´Ð°Ñкового докÑменÑа коÑиÑÑÑваÑевÑ.
РоÑновномÑ, ви пÑоÑÑо запÑÑкаÑÑе:
window.open('https://javascript.info/')
â¦Ð вÑдкÑиÑÑÑÑÑ Ð½Ð¾Ð²Ðµ вÑкно з Ð·Ð°Ð´Ð°Ð½Ð¾Ñ URL-адÑеÑоÑ. ÐÑлÑÑÑÑÑÑ ÑÑÑаÑÐ½Ð¸Ñ Ð±ÑаÑзеÑÑв налаÑÑовано на вÑдкÑиÑÑÑ URL-адÑÐµÑ Ñ Ð½Ð¾Ð²Ð¸Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ°Ñ Ð·Ð°Ð¼ÑÑÑÑ Ð¾ÐºÑÐµÐ¼Ð¸Ñ Ð²Ñкон.
СпливаÑÑÑ Ð²Ñкна ÑÑнÑÑÑÑ Ð· давнÑÑ
ÑаÑÑв. ÐоÑаÑкова ÑÐ´ÐµÑ Ð¿Ð¾Ð»Ñгала в ÑомÑ, Ñоб показаÑи ÑнÑий вмÑÑÑ, не закÑиваÑÑи оÑновне вÑкно. Ðа даний Ð¼Ð¾Ð¼ÐµÐ½Ñ Ñ ÑнÑÑ ÑпоÑоби зÑобиÑи Ñе: ми можемо динамÑÑно заванÑажÑваÑи вмÑÑÑ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ fetch Ñ Ð¿Ð¾ÐºÐ°Ð·ÑваÑи його Ñ Ð´Ð¸Ð½Ð°Ð¼ÑÑно згенеÑÐ¾Ð²Ð°Ð½Ð¾Ð¼Ñ <div>. ÐÑже, ÑпливаÑÑÑ Ð²Ñкна â Ñе не Ñе, Ñо ми викоÑиÑÑовÑÑмо ÑоднÑ.
ÐÑÑм Ñого, ÑпливаÑÑÑ Ð²Ñкна не дÑже зÑÑÑÐ½Ñ Ð´Ð»Ñ Ð¼Ð¾Ð±ÑлÑÐ½Ð¸Ñ Ð¿ÑиÑÑÑоÑв, ÑÐºÑ Ð½Ðµ показÑÑÑÑ ÐºÑлÑка вÑкон одноÑаÑно.
ÐÑоÑе Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ, де вÑе Ñе викоÑиÑÑовÑÑÑÑÑÑ ÑпливаÑÑÑ Ð²Ñкна, напÑ. Ð´Ð»Ñ Ð°Ð²ÑоÑизаÑÑÑ OAuth (Ð²Ñ Ñд ÑеÑез Google/Facebook/â¦), ÑÐ¾Ð¼Ñ Ñо:
- СпливаÑÑе вÑкно â Ñе окÑеме вÑкно, Ñке Ð¼Ð°Ñ Ð²Ð»Ð°Ñне незалежне ÑеÑедовиÑе JavaScript. Ð¢Ð¾Ð¼Ñ Ð²ÑдкÑиÑÑÑ ÑпливаÑÑого вÑкна Ñз ÑÑоÑоннÑого ненадÑйного ÑайÑÑ Ð±ÐµÐ·Ð¿ÐµÑно.
- ÐÑдкÑиÑи ÑпливаÑÑе вÑкно дÑже легко.
- СпливаÑÑе вÑкно може здÑйÑнÑваÑи навÑгаÑÑÑ (змÑнÑваÑи URL-адÑеÑÑ) Ñа надÑилаÑи повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð² оÑновне вÑкно.
ÐлокÑÐ²Ð°Ð½Ð½Ñ ÑпливаÑÑÐ¸Ñ Ð²Ñкон
У минÑÐ»Ð¾Ð¼Ñ Ð¿Ð¾Ð³Ð°Ð½Ñ ÑайÑи ÑаÑÑо зловживали ÑпливаÑÑими вÑкнами. Ðогана ÑÑоÑÑнка може вÑдкÑиÑи безлÑÑ ÑпливаÑÑÐ¸Ñ Ð²Ñкон з ÑекламоÑ. Ð¢Ð¾Ð¼Ñ Ð·Ð°Ñаз бÑлÑÑÑÑÑÑ Ð±ÑаÑзеÑÑв намагаÑÑÑÑÑ Ð±Ð»Ð¾ÐºÑваÑи ÑпливаÑÑÑ Ð²Ñкна Ñа Ð·Ð°Ñ Ð¸ÑÑиÑи коÑиÑÑÑваÑа.
ÐÑлÑÑÑÑÑÑ Ð±ÑаÑзеÑÑв блокÑÑÑÑ ÑпливаÑÑÑ Ð²Ñкна, ÑкÑо вони Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ñ Ð·Ð° межами обÑобникÑв подÑй, ÑнÑÑÑйованиÑ
коÑиÑÑÑваÑем, Ñк-Ð¾Ñ onclick.
ÐапÑиклад:
// ÑпливаÑÑе вÑкно заблоковано
window.open('https://javascript.info');
// ÑпливаÑÑе вÑкно дозволено
button.onclick = () => {
window.open('https://javascript.info');
};
Таким Ñином коÑиÑÑÑваÑÑ Ð´ÐµÑо Ð·Ð°Ñ Ð¸ÑÐµÐ½Ñ Ð²Ñд Ð½ÐµÐ±Ð°Ð¶Ð°Ð½Ð¸Ñ ÑпливаÑÑÐ¸Ñ Ð²Ñкон, але ÑÑнкÑÑоналÑнÑÑÑÑ Ð½Ðµ вÑдклÑÑаÑÑÑÑÑ Ð¿Ð¾Ð²Ð½ÑÑÑÑ.
window.open
СинÑакÑÐ¸Ñ Ð²ÑдкÑиÑÑÑ ÑпливаÑÑого вÑкна: window.open(url, name, params):
- url
- URL-адÑеÑа Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð² нове вÑкно.
- name
- ÐмâÑ Ð½Ð¾Ð²Ð¾Ð³Ð¾ вÑкна. Ðожне вÑкно маÑ
window.name, Ñ ÑÑÑ Ð¼Ð¸ можемо вказаÑи, Ñке вÑкно викоÑиÑÑовÑваÑи Ð´Ð»Ñ ÑпливаÑÑого вÑкна. ЯкÑо вÑкно з ÑÐ°ÐºÐ¾Ñ Ð½Ð°Ð·Ð²Ð¾Ñ Ð²Ð¶Ðµ Ñ â в нÑÐ¾Ð¼Ñ Ð²ÑдкÑиваÑÑÑÑÑ Ð´Ð°Ð½Ð° URL-адÑеÑа, ÑнакÑе вÑдкÑиваÑÑÑÑÑ Ð½Ð¾Ð²Ðµ вÑкно. - params
- Ð Ñдок конÑÑгÑÑаÑÑÑ Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ вÑкна. ÐÑн мÑÑÑиÑÑ Ð½Ð°Ð»Ð°ÑÑÑваннÑ, ÑоздÑÐ»ÐµÐ½Ñ ÐºÐ¾Ð¼Ð¾Ñ. У паÑамеÑÑаÑ
не повинно бÑÑи пÑобÑлÑв, напÑиклад:
width=200,height=100.
ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ params:
- ÐозиÑÑÑ:
left/top(ÑиÑловÑ) â кооÑдинаÑи веÑÑ Ð½Ñого лÑвого кÑÑа вÑкна на екÑанÑ. РобмеженнÑ: нове вÑкно не можна ÑозÑаÑÑваÑи за екÑаном.width/height(ÑиÑловÑ) â ÑиÑина Ñа виÑоÑа нового вÑкна. ÐÑнÑÑ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° мÑнÑмалÑÐ½Ñ ÑиÑинÑ/виÑоÑÑ, ÑÐ¾Ð¼Ñ ÑÑвоÑиÑи невидиме вÑкно неможливо.
- ХаÑакÑеÑиÑÑики вÑкна:
menubar(Ñак/нÑ) â показÑÑ Ð°Ð±Ð¾ пÑÐ¸Ñ Ð¾Ð²ÑÑ Ð¼ÐµÐ½Ñ Ð±ÑаÑзеÑа в Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð²ÑкнÑ.toolbar(Ñак/нÑ) â показÑÑ Ð°Ð±Ð¾ пÑÐ¸Ñ Ð¾Ð²ÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ Ð½Ð°Ð²ÑгаÑÑÑ Ð±ÑаÑзеÑа (назад, впеÑед, пеÑезаванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑоÑо) Ñ Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð²ÑкнÑ.location(Ñак/нÑ) â показÑÑ Ð°Ð±Ð¾ пÑÐ¸Ñ Ð¾Ð²ÑÑ Ð¿Ð¾Ð»Ðµ URL Ñ Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð²ÑкнÑ. FF Ñа IE не дозволÑÑÑÑ Ð¿ÑÐ¸Ñ Ð¾Ð²Ð°Ñи його за замовÑÑваннÑм.status(Ñак/нÑ) â показÑÑ Ð°Ð±Ð¾ пÑÐ¸Ñ Ð¾Ð²ÑÑ ÑÑдок ÑÑанÑ. ÐÐ½Ð¾Ð²Ñ Ð¶ Ñаки, бÑлÑÑÑÑÑÑ Ð±ÑаÑзеÑÑв змÑÑÑÑÑÑ Ð¹Ð¾Ð³Ð¾ показÑваÑи.resizable(Ñак/нÑ) â дозволÑÑ Ð²Ð¸Ð¼ÐºÐ½ÑÑи змÑÐ½Ñ ÑозмÑÑÑ Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ вÑкна. Ðе Ñекомендовано.scrollbars(Ñак/нÑ) â дозволÑÑ Ð²Ð¸Ð¼ÐºÐ½ÑÑи ÑмÑги пÑокÑÑÑки Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ вÑкна. Ðе Ñекомендовано.
ÐÑнÑÑ Ñакож ÑÑд Ð¼ÐµÐ½Ñ Ð¿ÑдÑÑимÑÐ²Ð°Ð½Ð¸Ñ ÑÑнкÑÑй бÑаÑзеÑа, ÑÐºÑ Ð·Ð°Ð·Ð²Ð¸Ñай не викоÑиÑÑовÑÑÑÑÑÑ. ÐеÑеглÑнÑÑе пÑиклади window.open Ñ MDN.
ÐÑиклад: мÑнÑмалÑÑÑиÑне вÑкно
ÐавайÑе вÑдкÑиÑмо вÑкно з мÑнÑмалÑним набоÑом ÑÑнкÑÑй, Ñоб побаÑиÑи, Ñкий Ñз Ð½Ð¸Ñ Ð±ÑаÑÐ·ÐµÑ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑ Ð²ÑдклÑÑиÑи:
let params = `scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,
width=0,height=0,left=-1000,top=-1000`;
open('/', 'test', params);
ТÑÑ Ð±ÑлÑÑÑÑÑÑ âÑÑнкÑÑй вÑкнаâ вимкнено, а вÑкно ÑозмÑÑено за екÑаном. ÐапÑÑÑÑÑÑ Ñ Ð¿Ð¾Ð´Ð¸Ð²ÑÑÑÑÑ, Ñо наÑпÑÐ°Ð²Ð´Ñ ÑÑанеÑÑÑÑ. ÐÑлÑÑÑÑÑÑ Ð±ÑаÑзеÑÑв âвипÑавлÑÑÑÑâ Ð´Ð¸Ð²Ð½Ñ ÑеÑÑ, Ñк-Ð¾Ñ Ð½ÑлÑове знаÑÐµÐ½Ð½Ñ width/height Ñа вÑдâÑÐ¼Ð½Ñ left/top. ÐапÑиклад, Chrome вÑдкÑÐ¸Ð²Ð°Ñ Ñаке вÑкно з Ð¿Ð¾Ð²Ð½Ð¾Ñ ÑиÑиноÑ/виÑоÑоÑ, Ñоб воно займало веÑÑ ÐµÐºÑан.
ÐавайÑе додамо звиÑÐ°Ð¹Ð½Ñ Ð¿Ð°ÑамеÑÑи позиÑÑонÑÐ²Ð°Ð½Ð½Ñ Ñа пÑийнÑÑÐ½Ñ ÐºÐ¾Ð¾ÑдинаÑи width, height, left, top:
let params = `scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,
width=600,height=300,left=100,top=100`;
open('/', 'test', params);
ÐÑлÑÑÑÑÑÑ Ð±ÑаÑзеÑÑв показÑÑÑÑ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¸Ð¹ виÑе пÑиклад Ñк поÑÑÑбно.
ÐÑавила Ð´Ð»Ñ Ð¿ÑопÑÑÐµÐ½Ð¸Ñ Ð½Ð°Ð»Ð°ÑÑÑванÑ:
- ЯкÑо Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ
openÐ½ÐµÐ¼Ð°Ñ ÑÑеÑÑого аÑгÑменÑÑ Ð°Ð±Ð¾ вÑн поÑожнÑй, Ñо викоÑиÑÑовÑÑÑÑÑÑ Ð¿Ð°ÑамеÑÑи вÑкна за замовÑÑваннÑм. - ЯкÑо Ñ ÑÑдок паÑамеÑÑÑв, але деÑкÑ
yes/noпаÑамеÑÑи пÑопÑÑенÑ, ÑÐ¾Ð´Ñ Ð²Ð²Ð°Ð¶Ð°ÑÑÑÑÑ, Ñо вони маÑÑÑ Ð·Ð½Ð°ÑеннÑno. Ð¢Ð¾Ð¼Ñ ÑкÑо ви вказÑÑÑе паÑамеÑÑи, пеÑеконайÑеÑÑ, Ñо ви Ñвно вÑÑановили Ð´Ð»Ñ Ð²ÑÑÑ Ð½ÐµÐ¾Ð±Ñ ÑÐ´Ð½Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ñак. - ЯкÑо в паÑамеÑÑаÑ
немаÑ
left/top, ÑÐ¾Ð´Ñ Ð±ÑаÑÐ·ÐµÑ Ð½Ð°Ð¼Ð°Ð³Ð°ÑÑÑÑÑ Ð²ÑдкÑиÑи нове вÑкно бÑÐ»Ñ Ð¾ÑÑаннÑого вÑдкÑиÑого вÑкна. - ЯкÑо немаÑ
width/height, ÑÐ¾Ð´Ñ Ð½Ð¾Ð²Ðµ вÑкно маÑиме Ñакий Ñамий ÑозмÑÑ, Ñк Ñ Ð¾ÑÑÐ°Ð½Ð½Ñ Ð²ÑдкÑиÑе.
ÐоÑÑÑп до ÑпливаÑÑого вÑкна з window
Ðиклик open повеÑÑÐ°Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° нове вÑкно. Ðого можна викоÑиÑÑовÑваÑи Ð´Ð»Ñ Ð¼Ð°Ð½ÑпÑлÑÐ²Ð°Ð½Ð½Ñ Ð¹Ð¾Ð³Ð¾ влаÑÑивоÑÑÑми, змÑни ÑозÑаÑÑÐ²Ð°Ð½Ð½Ñ ÑоÑо.
У ÑÑÐ¾Ð¼Ñ Ð¿ÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð¼Ð¸ генеÑÑÑмо ÑпливаÑÑе вÑкно з JavaScript:
let newWin = window.open("about:blank", "hello", "width=200,height=200");
newWin.document.write("ÐÑивÑÑ, ÑвÑÑ!");
Ð ÑÑÑ Ð¼Ð¸ змÑнÑÑмо вмÑÑÑ Ð¿ÑÑÐ»Ñ Ð·Ð°Ð²Ð°Ð½ÑаженнÑ:
let newWindow = open('/', 'example', 'width=300,height=300')
newWindow.focus();
alert(newWindow.location.href); // (*) about:blank, заванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ñе не поÑалоÑÑ
newWindow.onload = function() {
let html = `<div style="font-size:30px">ÐаÑкаво пÑоÑимо!</div>`;
newWindow.document.body.insertAdjacentHTML('afterbegin', html);
};
ÐвеÑнÑÑÑ ÑвагÑ: одÑÐ°Ð·Ñ Ð¿ÑÑÐ»Ñ window.open нове вÑкно Ñе не заванÑажено. Це демонÑÑÑÑÑ alert в ÑÑÐ´ÐºÑ â(*)â. Ð¢Ð¾Ð¼Ñ Ð¼Ð¸ ÑекаÑмо onload, Ñоб змÑниÑи його. Ðи Ñакож можемо викоÑиÑÑовÑваÑи обÑобник DOMContentLoaded Ð´Ð»Ñ newWin.document.
ÐÑкна можÑÑÑ Ð²ÑлÑно оÑÑимÑваÑи доÑÑÑп до вмÑÑÑÑ Ð¾Ð´Ð¸Ð½ одного, лиÑе ÑкÑо вони маÑÑÑ Ð¾Ð´Ð½Ðµ Ð¿Ð¾Ñ Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ (однаковий protocol://domain:port).
ÐнакÑе, напÑ. ÑкÑо оÑновне вÑкно з ÑайÑÑ site.com, а ÑпливаÑÑе з gmail.com, Ñе неможливо з мÑÑкÑÐ²Ð°Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ коÑиÑÑÑваÑа. ÐодаÑÐºÐ¾Ð²Ñ ÑнÑоÑмаÑÑÑ Ð´Ð¸Ð². Ñ ÑоздÑÐ»Ñ ÐÑжвÑконна комÑнÑкаÑÑÑ.
ÐоÑÑÑп до window Ð·Ñ ÑпливаÑÑого вÑкна
СпливаÑÑе вÑкно Ñакож може оÑÑимаÑи доÑÑÑп до оÑновного вÑкна за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ window.opener. Ðоно Ð¼Ð°Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ null Ð´Ð»Ñ Ð²ÑÑÑ
вÑкон, кÑÑм ÑпливаÑÑиÑ
.
ЯкÑо ви запÑÑÑиÑе наведений нижÑе код, вÑн замÑниÑÑ Ð²Ð¼ÑÑÑ Ð¾Ñновного вÑкна (поÑоÑного) на âТеÑÑâ:
let newWin = window.open("about:blank", "hello", "width=200,height=200");
newWin.document.write(
"<script>window.opener.document.body.innerHTML = 'ТеÑÑ'<\/script>"
);
Таким Ñином, звâÑзок мÑж вÑкнами Ñ Ð´Ð²Ð¾Ð½Ð°Ð¿Ñавленим: оÑновне вÑкно Ñа ÑпливаÑÑе вÑкно маÑÑÑ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¾Ð´Ð¸Ð½ на одного.
ÐакÑиÑÑÑ ÑпливаÑÑого вÑкна
Щоб закÑиÑи вÑкно: win.close().
Щоб пеÑевÑÑиÑи, Ñи закÑиÑе вÑкно: win.closed.
ТеÑ
нÑÑно меÑод close() доÑÑÑпний Ð´Ð»Ñ Ð±ÑдÑ-Ñкого window, але window.close() ÑгноÑÑÑÑÑÑÑ Ð±ÑлÑÑÑÑÑÑ Ð±ÑаÑзеÑÑв, ÑкÑо window не ÑÑвоÑено за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ window.open(). Тож вÑн пÑаÑÑваÑиме лиÑе Ñ ÑпливаÑÑÐ¾Ð¼Ñ Ð²ÑкнÑ.
ÐлаÑÑивÑÑÑÑ closed Ð¼Ð°Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ true, ÑкÑо вÑкно закÑиÑе. Це коÑиÑно, Ñоб пеÑевÑÑиÑи, Ñи вÑдкÑиÑе ÑпливаÑÑе вÑкно (або оÑновне вÑкно) Ñи нÑ. ÐоÑиÑÑÑÐ²Ð°Ñ Ð¼Ð¾Ð¶Ðµ закÑиÑи його в бÑдÑ-Ñкий ÑаÑ, Ñ Ð½Ð°Ñ ÐºÐ¾Ð´ повинен вÑаÑ
овÑваÑи ÑÑ Ð¼Ð¾Ð¶Ð»Ð¸Ð²ÑÑÑÑ.
Цей код заванÑажÑÑÑÑÑÑ, а поÑÑм закÑÐ¸Ð²Ð°Ñ Ð²Ñкно:
let newWindow = open('/', 'example', 'width=300,height=300');
newWindow.onload = function() {
newWindow.close();
alert(newWindow.closed); // true
};
ÐеÑемÑÑÐµÐ½Ð½Ñ Ñа змÑна ÑозмÑÑÑ
ÐÑнÑÑÑÑ Ð¼ÐµÑоди пеÑемÑÑеннÑ/змÑни ÑозмÑÑÑ Ð²Ñкна:
win.moveBy(x,y)- ÐеÑемÑÑÑиÑи вÑкно вÑдноÑно поÑоÑÐ½Ð¾Ñ Ð¿Ð¾Ð·Ð¸ÑÑÑ
xпÑкÑелÑв пÑавоÑÑÑ ÑyпÑкÑелÑв вниз. ÐопÑÑкаÑÑÑÑÑ Ð²ÑдâÑÐ¼Ð½Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ (пеÑемÑÑÐµÐ½Ð½Ñ Ð²Ð»Ñво/вгоÑÑ). win.moveTo(x,y)- ÐеÑемÑÑÑиÑи вÑкно до кооÑдинаÑ
(x,y)на екÑанÑ. win.resizeBy(width,height)- ÐмÑниÑи ÑозмÑÑ Ð²Ñкна на заданÑ
width/heightвÑдноÑно поÑоÑного ÑозмÑÑÑ. ÐопÑÑкаÑÑÑÑÑ Ð²ÑдâÑÐ¼Ð½Ñ Ð·Ð½Ð°ÑеннÑ. win.resizeTo(width,height)- ÐмÑниÑи ÑозмÑÑ Ð²Ñкна на заданий.
ÐÑнÑÑ Ñакож подÑÑ window.onresize.
Щоб запобÑгÑи зловживаннÑм, бÑаÑÐ·ÐµÑ Ð·Ð°Ð·Ð²Ð¸Ñай блокÑÑ ÑÑ Ð¼ÐµÑоди. Ðони надÑйно пÑаÑÑÑÑÑ Ð»Ð¸Ñе на вÑдкÑиÑÑ Ð½Ð°Ð¼Ð¸ ÑпливаÑÑÑ Ð²Ñкна, ÑÐºÑ Ð½Ðµ маÑÑÑ Ð´Ð¾Ð´Ð°ÑÐºÐ¾Ð²Ð¸Ñ Ð²ÐºÐ»Ð°Ð´Ð¾Ðº.
JavaScript не Ð¼Ð°Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑÑ Ð·Ð³Ð¾ÑÑаÑи або ÑозгоÑÑаÑи вÑкно. Ð¦Ñ ÑÑнкÑÑÑ ÑÑÐ²Ð½Ñ ÐС пÑÐ¸Ñ Ð¾Ð²Ð°Ð½Ñ Ð²Ñд Frontend-ÑозÑобникÑв.
ÐеÑоди пеÑемÑÑеннÑ/змÑÐ½ÐµÐ½Ð½Ñ ÑозмÑÑÑ Ð½Ðµ пÑаÑÑÑÑÑ Ð´Ð»Ñ ÑозгоÑнÑÑÐ¸Ñ /згоÑнÑÑÐ¸Ñ Ð²Ñкон.
ÐÑокÑÑÑÑÐ²Ð°Ð½Ð½Ñ Ð²Ñкна
Ðи вже говоÑили пÑо пÑокÑÑÑÑÐ²Ð°Ð½Ð½Ñ Ð²Ñкна в ÑоздÑÐ»Ñ Ð Ð¾Ð·Ð¼ÑÑи вÑкна Ñ Ð¿ÑокÑÑÑка.
win.scrollBy(x,y)- ÐÑокÑÑÑиÑÑ Ð²Ñкно
xпÑкÑелÑв пÑавоÑÑÑ Ñyвниз вÑдноÑно поÑоÑного пÑокÑÑÑÑваннÑ. ÐопÑÑкаÑÑÑÑÑ Ð²ÑдâÑÐ¼Ð½Ñ Ð·Ð½Ð°ÑеннÑ. win.scrollTo(x,y)- ÐÑокÑÑÑиÑÑ Ð²Ñкно до заданиÑ
кооÑдинаÑ
(x,y). elem.scrollIntoView(top = true)- ÐÑокÑÑÑиÑÑ Ð²Ñкно, Ñоб
elemвÑдобÑажавÑÑ Ð²Ð³Ð¾ÑÑ (за замовÑÑваннÑм) або Ð²Ð½Ð¸Ð·Ñ Ð´Ð»Ñelem.scrollIntoView(false).
ÐÑнÑÑ Ñакож подÑÑ window.onscroll.
ФокÑÑÑваннÑ/ÑозÑокÑÑÑÐ²Ð°Ð½Ð½Ñ Ð½Ð° вÑкнÑ
ТеоÑеÑиÑно ÑÑнÑÑÑÑ Ð¼ÐµÑоди window.focus() Ñ window.blur() Ð´Ð»Ñ ÑокÑÑÑваннÑ/ÑозÑокÑÑÑÐ²Ð°Ð½Ð½Ñ Ð½Ð° вÑкнÑ. Ð Ñакож подÑÑ focus/blur, ÑÐºÑ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑÑÑ Ð²Ð»Ð¾Ð²Ð¸Ñи моменÑ, коли вÑдвÑдÑÐ²Ð°Ñ ÑокÑÑÑÑÑÑÑÑ Ð½Ð° вÑÐºÐ½Ñ Ñа пеÑемикаÑÑÑÑÑ Ð² ÑнÑе мÑÑÑе.
ХоÑа на пÑакÑиÑÑ Ð²Ð¾Ð½Ð¸ ÑилÑно обмеженÑ, бо в минÑÐ»Ð¾Ð¼Ñ âпоганÑâ ÑÑоÑÑнки ними зловживали.
ÐапÑиклад, подивÑÑÑÑÑ Ð½Ð° Ñей код:
window.onblur = () => window.focus();
Ðоли коÑиÑÑÑÐ²Ð°Ñ Ð½Ð°Ð¼Ð°Ð³Ð°ÑÑÑÑÑ Ð¿ÐµÑемикнÑÑи ÑокÑÑ Ñз поÑоÑного вÑкна (window.onblur), ÑокÑÑ Ð¿Ð¾Ð²ÐµÑÑаÑÑÑÑÑ Ð½Ð°Ð·Ð°Ð´. ÐеÑа полÑÐ³Ð°Ñ Ð² ÑомÑ, Ñоб âзаблокÑваÑиâ коÑиÑÑÑваÑа Ñ window.
Тож бÑаÑзеÑам довелоÑÑ Ð²Ð²ÐµÑÑи багаÑо обмеженÑ, Ñоб забоÑониÑи Ñакий код Ñ Ð·Ð°Ñ Ð¸ÑÑиÑи коÑиÑÑÑваÑа вÑд Ñеклами Ñа ÑкÑÐ´Ð»Ð¸Ð²Ð¸Ñ ÑÑоÑÑнок. Ð¦Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð°Ð»ÐµÐ¶Ð°ÑÑ Ð²Ñд бÑаÑзеÑа.
ÐапÑиклад, мобÑлÑний бÑаÑÐ·ÐµÑ Ð·Ð°Ð·Ð²Ð¸Ñай повнÑÑÑÑ ÑгноÑÑÑ window.focus(). Також ÑокÑÑÑÐ²Ð°Ð½Ð½Ñ Ð½Ðµ пÑаÑÑÑ, коли ÑпливаÑÑе вÑкно вÑдкÑиваÑÑÑÑÑ Ð² окÑемÑй вкладÑÑ, а не в Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð²ÑкнÑ.
ÐÑоÑе Ñ Ð´ÐµÑÐºÑ Ð²Ð¸Ð¿Ð°Ð´ÐºÐ¸ викоÑиÑÑаннÑ, коли ÑÐ°ÐºÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ¸ пÑаÑÑÑÑÑ Ñ Ð¼Ð¾Ð¶ÑÑÑ Ð±ÑÑи коÑиÑними.
ÐапÑиклад:
- Ðоли ми вÑдкÑиваÑмо ÑпливаÑÑе вÑкно, може бÑÑи гаÑÐ½Ð¾Ñ ÑдеÑÑ Ð·Ð°Ð¿ÑÑÑиÑи в нÑомÑ
newWindow.focus(). ÐÑо вÑÑк випадок, Ð´Ð»Ñ Ð´ÐµÑÐºÐ¸Ñ ÐºÐ¾Ð¼Ð±ÑнаÑÑй ÐС/бÑаÑÐ·ÐµÑ Ñе гаÑанÑÑÑ, Ñо коÑиÑÑÑÐ²Ð°Ñ Ð·Ð°Ñаз Ñ Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð²ÑкнÑ. - ЯкÑо ми Ñ
оÑемо вÑдÑÑежÑваÑи, коли вÑдвÑдÑÐ²Ð°Ñ Ð´ÑйÑно викоÑиÑÑовÑÑ Ð½Ð°ÑÑ Ð²ÐµÐ±-пÑогÑамÑ, ми можемо вÑдÑÑежÑваÑи
window.onfocus/onblur. Це дозволÑÑ Ð½Ð°Ð¼ пÑизÑпиниÑи/вÑдновиÑи дÑÑ Ð½Ð° ÑÑоÑÑнÑÑ, анÑмаÑÑÑ ÑоÑо. Ðле, бÑÐ´Ñ Ð»Ð°Ñка, звеÑнÑÑÑ ÑвагÑ, Ñо подÑÑblurознаÑаÑ, Ñо вÑдвÑдÑÐ²Ð°Ñ Ð²Ð¸Ð¹Ñов Ñз вÑкна, але вÑн вÑе одно може ÑпоÑÑеÑÑгаÑи за ним. ÐÑкно Ð·Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ñ ÑÐ¾Ð½Ð¾Ð²Ð¾Ð¼Ñ ÑежимÑ, але вÑе Ñе може бÑÑи видимим.
ÐÑдÑÑмки
СпливаÑÑÑ Ð²Ñкна викоÑиÑÑовÑÑÑÑÑÑ ÑÑдко, оÑкÑлÑки Ñ Ð°Ð»ÑÑеÑнаÑиви: заванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ñа вÑдобÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑнÑоÑмаÑÑÑ Ð½Ð° ÑÑоÑÑнÑÑ Ð°Ð±Ð¾ в iframe.
ЯкÑо ми збиÑаÑмоÑÑ Ð²ÑдкÑиÑи ÑпливаÑÑе вÑкно, Ñ Ð¾ÑоÑа пÑакÑика â повÑдомиÑи пÑо Ñе коÑиÑÑÑваÑа. ÐнаÑок âвÑдкÑиÑÑÑ Ð²Ñкнаâ поÑÑÑ Ñз поÑиланнÑм або ÐºÐ½Ð¾Ð¿ÐºÐ¾Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»Ð¸ÑÑ Ð²ÑдвÑдÑваÑÐµÐ²Ñ Ð·ÑозÑмÑÑи, Ñо вÑдбÑваÑÑÑÑÑ Ð· ÑокÑÑом Ñ Ð½Ðµ вÑÑаÑиÑи обидва вÑкна з Ð¿Ð¾Ð»Ñ Ð·Ð¾ÑÑ.
- СпливаÑÑе вÑкно можна вÑдкÑиÑи за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ
open(url, name, params). ÐÑн повеÑÑÐ°Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ñойно вÑдкÑиÑе вÑкно. - ÐÑаÑзеÑи блокÑÑÑÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ¸
openз ÐºÐ¾Ð´Ñ Ð·Ð° межами дÑй коÑиÑÑÑваÑа. ÐазвиÑай зâÑвлÑÑÑÑÑÑ ÑповÑÑеннÑ, Ñоб коÑиÑÑÑÐ²Ð°Ñ Ð¼Ñг ÑÑ Ð´Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñи. - Типово бÑаÑзеÑи вÑдкÑиваÑÑÑ Ð½Ð¾Ð²Ñ Ð²ÐºÐ»Ð°Ð´ÐºÑ, але ÑкÑо вказано ÑозмÑÑи, Ñо Ñе бÑде ÑпливаÑÑе вÑкно.
- СпливаÑÑе вÑкно може оÑÑимаÑи доÑÑÑп до оÑновного вÑкна за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ
window.opener. - ÐÑновне вÑкно Ñа ÑпливаÑÑе вÑкно можÑÑÑ Ð²ÑлÑно ÑиÑаÑи Ñа змÑнÑваÑи одне одного, ÑкÑо вони маÑÑÑ Ð¾Ð´Ð½Ð°ÐºÐ¾Ð²Ðµ Ð¿Ð¾Ñ Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ. ÐнакÑе вони можÑÑÑ Ð·Ð¼ÑниÑи ÑозÑаÑÑÐ²Ð°Ð½Ð½Ñ Ð¾Ð´Ð¸Ð½ одного Ñа обмÑнÑваÑиÑÑ Ð¿Ð¾Ð²ÑдомленнÑми.
Щоб закÑиÑи ÑпливаÑÑе вÑкно: ÑкоÑиÑÑайÑеÑÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ¾Ð¼ close(). Також коÑиÑÑÑÐ²Ð°Ñ Ð¼Ð¾Ð¶Ðµ закÑиÑи ÑÑ
(Ñк Ñ Ð±ÑдÑ-ÑÐºÑ ÑнÑÑ Ð²Ñкна). ÐÑÑÐ»Ñ ÑÑого window.closed ÑÑÐ°Ñ true.
- ÐеÑоди
focus()Ñblur()дозволÑÑÑÑ ÑокÑÑÑваÑи/ÑозÑокÑÑÑваÑи вÑкно. Ðле вони пÑаÑÑÑÑÑ Ð½Ðµ завжди. - ÐодÑÑ
focusÑаblurдозволÑÑÑÑ Ð²ÑдÑÑежÑваÑи ÑокÑÑÑÐ²Ð°Ð½Ð½Ñ Ð½Ð° вÑÐºÐ½Ñ Ñа поза ним. Ðле звеÑнÑÑÑ ÑвагÑ, Ñо вÑкно вÑе Ñе може бÑÑи видимим навÑÑÑ Ñ ÑÐ¾Ð½Ð¾Ð²Ð¾Ð¼Ñ ÑÑÐ°Ð½Ñ Ð¿ÑÑлÑblur.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)