HTML, Excel, Word, SEOÎñíîâû JavaScript ⇒ Îêíà è ôðåéìû

ÎÑÍÎÂÛ JavaScript

Ó÷åáíèê JavaScript
·Çíàêîìñòâî ñ JS. Ïåðåìåííûå, îïåðàòîðû, îïåðàöèè
·Ôóíêöèè
·Ìîäåëü HTML äîêóìåíòà
·Èåðàðõèÿ äîêóìåíòîâ â áðàçóåðå
·Ôîðìû
·Îêíà è ôðåéìû
·Ññûëêè, çàãîëîâîê, ñòàòóñ
·Ñîáûòèÿ
·Ñîáûòèÿ êëàâèàòóðû è ìûøè
·Ñîáûòèÿ. Òàéìåð
·Ñòèëè. Óïðàâëåíèå ñòèëÿìè
·Ñëîè è áëîêè. Óïðàâëåíèå âèäèìîñòüþ
·Îáúåêòû JS
·Âíåøíèå îáúåêòû
·Âíóòðåííèå îáúåêòû
·Ìàññèâû
·Ðåãóëÿðíûå âûðàæåíèÿ
·Ìàòåìàòèêà â JS
·Ïðèìåð ïðîñòîãî êàëüêóëÿòîðà
·Äàòà è âðåìÿ
·Cookies è õðàíåíèå ñîñòîÿíèÿ
·Íåìíîãî îá AJAX
·Ðàáîòà ñ WebMoney

 

Îêíà è ôðåéìû



Ñîçäàíèå íîâîãî îêíà è äîñòóï ê íåìó

Ôðåéì êàê îòäåëüíîå îêíî

Áîëüøèíñòâî ñîâðåìåííûõ ñàéòîâ íå èñïîëüçóþò ôðåéìû è ìíîãî÷èñëåííûå îêíà (â ÷àñòíîñòè, âñïëûâàþùèå), è ïðè÷èí ýòîìó ìíîãî.  ÷àñòíîñòè, èñïîëüçîâàíèå âñïëûâàþùèõ îêîí îãðàíè÷èâàåòñÿ ïàíè÷åñêîé áîÿçíüþ ìíîãèõ ïîëüçîâàòåëåé (è çëîóïîòðåáëåíèåì ýòèìè îêíàìè äëÿ ðåêëàìû), à ôðåéìû íàðóøàþò ñòðóêòóðó ñòðàíèöû, è ïðîèçâîäÿò åùå ìàññó ïðîáëåì, ñâÿçàííûõ ñ èíäåêñèðîâàíèåì ñàéòîâ.  òî æå âðåìÿ, íåêîòîðûå ïðèëîæåíèÿ äî ñèõ ïîð ïîëüçóþòñÿ óäîáñòâîì ôðåéìîâ äëÿ ñîçäàíèÿ íàâèãàöèîííûõ ìåíþ è ìîùüþ âñïëûâàþùèõ îêîí êàê èíòåðôåéñíûõ ýëåìåíòîâ, è êàê ïðèìåð ýòîìó – ñèñòåìà äëÿ óïðàâëåíèÿ áàçîé äàííûõ PhpMyAdmin. 

ß íè â êîåé ìåðå íå áóäó ðåêîìåíäîâàòü âàì èñïîëüçîâàòü ôðåéìû è âñïëûâàþùèå (è ïðîñòî ìíîæåñòâåííûå) îêíà â ñâîèõ ïðèëîæåíèÿõ. Íî ñâåäåíèÿ î íèõ ìîãóò ïðèãîäèòüñÿ ïðè ðàçáîðå ÷óæèõ ñêðèïòîâ è ñîçäàíèè ñâîèõ.  

Ñîçäàíèå íîâîãî îêíà è äîñòóï ê íåìó

Äëÿ ñîçäàíèÿ íîâîãî äî÷åðíåãî îêíà îáúåêò window, ñàì ïðåäñòàâëÿþùèé îêíî, ñîäåðæèò âñåãî îäíó ôóíêöèþ – open(). Íåñìîòðÿ íà êàæóùóþñÿ ïðîñòîòó, ýòà ôóíêöèÿ ïîçâîëÿåò îïðåäåëÿòü öåëóþ ãðóïïó ïàðàìåòðîâ è ñâîéñòâ ñâåæåñîçäàííîãî îêíà.

Ïðè ïðîñòåéøåì âûçîâå – òî åñòü, âûçîâå window.open() ïðîèçîéäåò òî æå ñàìîå, ÷òî è ïðè íàæàòèè Control-N èëè Control-T â áðàóçåðå (íó, ñ òåì èñêëþ÷åíèåì, ÷òî áðàóçåð íà÷íåò âîçìóùàòüñÿ ïî ïîâîäó âñïëûâàþùèõ îêîí – íóæíî áóäåò åãî óñïîêîèòü è ñêàçàòü ÷òî âñå â ïîðÿäêå). Òî åñòü – îòêðîåòñÿ íîâîå îêíî èëè âêëàäêà áðàóçåðà, êîòîðàÿ áóäåò èìåòü ðàçìåðû ïî óìîë÷àíèþ, è ñîäåðæàòü about:blank

Äëÿ òîãî, ÷òîáû çàãðóçèòü â îêíî äàííûå, åñòü íåñêîëüêî (äóìàþ, âû óæå ïðèâûêëè) ñïîñîáîâ. 

Ïåðâûé – ýòî óêàçàòü ïðè îòêðûòèè îêíà URL, êîòîðûé áóäåò çàãðóæåí â ýòî îêíî. Äåëàåòñÿ ýòî ïðè ïîìîùè óêàçàíèÿ ïåðâîãî ïàðàìåòðà – ñòðîêè ñ íóæíûì URL. Òîãäà ïîñëå îòêðûòèÿ ýòîò URL áóäåò çàïðîøåí áðàóçåðîì, êàê åñëè áû âû âáèëè åãî â ñòðîêó àäðåñà è íàæàëè Enter. 

Âòîðîé ñïîñîá íåñêîëüêî ñëîæíåå, è îñíîâàí íà ñâÿçè îñíîâíîãî îêíà ñ äî÷åðíèì. 

Äëÿ òîãî ÷òîáû èì âîñïîëüçîâàòüñÿ íóæíî ðåçóëüòàò ôóíêöèè open() çàíåñòè â ïåðåìåííóþ.

Òåïåðü ýòà ïåðåìåííàÿ ïðåäñòàâëÿåò íîâîå îêíî – òî åñòü, äëÿ ðàáîòû ñ äîêóìåíòîì íîâîãî îêíà òåìè ñïîñîáàìè, êîòîðûå âàì óäîáíåå (è êîòîðûå âû èçó÷àëè äî ýòîãî) äîñòàòî÷íî èñïîëüçîâàòü ñâîéñòâî document ýòîé ïåðåìåííîé. Ê ñîæàëåíèþ, âòîðîé ñïîñîá ñîïðÿæåí ñ ìàññîé íåóäîáñòâ. Îñíîâíîå íåóäîáñòâî ñîñòîèò â òîì, ÷òî ôóíêöèÿ open() âûïîëíÿåòñÿ àñèíõðîííî. Òî åñòü íèêòî íå ìîæåò ãàðàíòèðîâàòü, ÷òî ïîñëå åå âûçîâà ó ñîçäàííîãî îêíà áóäåò document – îí ìîæåò ïîÿâèòüñÿ ÷åðåç ñåêóíäó, íàïðèìåð. Îáðàùåíèå æå ê íåñîçäàííûì îáúåêòàì (äàæå õóæå – ê íàïîëîâèíó ñîçäàííûì) ìîæåò âûçâàòü íåêîòîðûå ïðîáëåìû.  ìîåì ñëó÷àå ýòî áûëî çàâèñàíèå áðàóçåðà FireFox, è ïðîñòî îøèáêà â áðàóçåðå Internet Explorer

Ïîýòîìó ÷àùå âñåãî èñïîëüçóåòñÿ ñìåøàííàÿ òåõíèêà – ñíà÷àëà çàãðóæàåòñÿ óæå ãîòîâûé HTML-êîä, à ïîñëå ýòîãî îñóùåñòâëÿåòñÿ äîñòóï ê íåìó ïðè ïîìîùè ðåçóëüòàòà ðàáîòû ôóíêöèè open().

Ñâÿçü îêîí íå îãðàíè÷èâàåòñÿ äîñòóïîì ê äî÷åðíåìó îêíó èç îñíîâíîãî. Âîçìîæåí òàêæå è îáðàòíûé äîñòóï – ê ãëàâíîìó èç äî÷åðíåãî. Ýòîò ñïîñîá äîñòóïà èñïîëüçóåòñÿ äàæå ÷àùå – äî÷åðíåå îêíî îòïðàâëÿåò äàííûå ãëàâíîìó. 

Ôóíêöèÿ open() èìååò ñëåäóþùèå ïàðàìåòðû:

  1. URL. Ýòîò ïàðàìåòð óæå óïîìèíàëñÿ, îí ñëóæèò óêàçàíèåì, êàêîé äîêóìåíò çàãðóæàòü. 

  2. Íàçâàíèå îêíà èëè çíà÷åíèå àòðèáóòå target. Ïî íåèçâåñòíîé ìíå ïðè÷èíå, ýòîò ïàðàìåòð ïîçâîëÿåò êàê óêàçàòü, â êàêîì target îòêðûâàòü îêíî, òàê è óêàçàòü èìÿ íîâîãî îêíà. Åñëè ïåðâîå èñïîëüçîâàíèå âàì äîëæíî áûòü çíàêîìî åùå ïî ÿçûêó HTML (òî åñòü â äàííîì ñëó÷àå îíî ðàáîòàåò êàê òîò æå target ó ññûëêè), òî ñëó÷àé, êîãäà ýòîò ïàðàìåòð îáîçíà÷àåò èìÿ îêíà íóæíî ïîÿñíèòü. Äåëî â òîì, ÷òî êàæäîå îêíî áðàóçåðà ìîæåò èìåòü èìÿ, ïðè÷åì ýòî èìÿ íå ñâÿçàíî ñ title îêíà èëè äðóãèìè ïàðàìåòðàìè. Åñëè îêíî ñ óêàçàííûì èìåíåì óæå ñóùåñòâóåò, òî îíî íå áóäåò çàíîâî îòêðûòî. 

  3. Òðåòèé ïàðàìåòð ïðåäñòàâëÿåò èç ñåáÿ ñïèñîê «ñïåöèôèêàöèé» îêíà, ðàçäåëåííûõ çàïÿòûìè (íàïðèìåð, 'width=200,height=100'). Íàñòðîåê ó îêíà äîâîëüíî ìíîãî, õîòÿ íå âñå îíè ðåàëèçîâàíû âî âñåõ áðàóçåðàõ. Íàèáîëåå îáùèå èç íèõ – ýòî height, width, left, top (ýòè ïàðàìåòðû óïðàâëÿþò ðàçìåðàìè îêíà è ïîëîæåíèåì îòíîñèòåëüíî âåðõíåãî ëåâîãî óãëà ýêðàíà), à òàêæå location, menubar è toolbar (ýòè ïàðàìåòðû îïðåäåëÿþò, ïîêàçûâàòü ëè ýëåìåíòû îôîðìëåíèÿ áðàóçåðà, òàêèå êàê ïàíåëü àäðåñà èëè ìåíþ).  

Äëÿ òîãî ÷òîáû ïðîäåìîíñòðèðîâàòü òåõíèêè ðàáîòû ñ äî÷åðíèìè îêíàìè, ÿ ïðåäëàãàþ ñëåäóþùóþ çàäà÷ó (ïðåäëàãàþ, åñòåñòâåííî, ñåáå, òàê êàê ÿ æå è áóäó åå ðåøàòü): 

HTML-êîä ñîäåðæèò êíîïêó ñèíõðîíèçàöèè ôîðì; ïðè îòêðûòèè ïðîãðàììíî îòêðûâàþòñÿ äâà îêíà (ñ îäíèì è òåì æå êîäîì); ïðè íàæàòèè íà êíîïêó ñèíõðîíèçàöèè äàííûå ôîðìû ïåðåíîñÿòñÿ â ñîñåäíåå îêíî. 

Ñîçäàâàòü áîëüøóþ ôîðìó ÿ íå áóäó – âû âåäü è òàê óæå óìååòå ðàáîòàòü ñ ôîðìàìè. Âìåñòî ýòîãî ôîðìà áóäåò ñîäåðæàòü ïðîñòîå òåêñòîâîå ïîëå. 

Ñàìûé áîëüøîé èíòåðåñ ïðåäñòàâëÿåò îáìåí èíôîðìàöèåé ìåæäó îêíàìè – òàê êàê îêíà ñîäåðæàò àáñîëþòíî èäåíòè÷íûé êîä, îíè áóäóò «äîãîâàðèâàòüñÿ» êòî èç íèõ ãëàâíîå, à êòî äî÷åðíåå, è âåñòè ñåáÿ ñîîòâåòñòâåííî. Îñíîâíûå ïðåèìóùåñòâà òàêîãî ìåòîäà – íå íóæíî áåñïîêîèòüñÿ, ÷òî äî÷åðíåå îêíî ìîæåò çàãðóçèòüñÿ ðàíüøå ãëàâíîãî, è âåñü êîä ñîäåðæèòñÿ â îäíîì ìåñòå. Íåäîñòàòêè – â îäíîì è òîì æå êîäå ñîäåðæàòñÿ ôóíêöèè êàê îñíîâíîãî, òàê è äî÷åðíåãî îêíà.  

Èòàê, äëÿ íà÷àëà, HTML-êîä. ß áóäó èñïîëüçîâàòü óæå çíàêîìûé âàì àòðèáóò onClick äëÿ âûçîâà ôóíêöèè ñèíõðîíèçàöèè ïî íàæàòèþ êíîïêè.

<html> 
        <head>
                <script type="text/javascript" src="sync.js"></script>
        </head>
        <body>
                <textarea id="sync_value"></textarea>
                <input type="button" id='btn' value="Sync" onClick="sync_func();" disabled='disabled' />
        </body>
</html> 

Êàê âû âèäèòå, êîä òðèâèàëüíûé, è â ïîÿñíåíèÿõ íå íóæäàåòñÿ. 

Îñíîâíóþ ðàáîòó áåðåò íà ñåáÿ âêëþ÷àåìûé ñêðèïò. 

Ñòðóêòóðà ñêðèïòà áóäåò óæå íå òàêîé òðèâèàëüíîé. Êàê è ðàíüøå, ðàçîáúåì çàäà÷ó íà íåñêîëüêî ïîäçàäà÷. 

 íàøåì ñêðèïòå äîëæíû áûòü ñëåäóþùèå âîçìîæíîñòè: 

Åñòåñòâåííî, ïîâåäåíèå êîäà áóäåò çàâèñåòü îò òîãî, ãëàâíîå ýòî îêíî èëè äî÷åðíåå. 

Äëÿ ïðîâåðêè «ïîä÷èíåííîñòè» îêíà áóäåò èñïîëüçîâàòüñÿ îäíî èç ñâîéñòâ îáúåêòà windowopener. Ýòî ñâîéñòâî ñîäåðæèò ññûëêó íà îáúåêò îòêðûâøåãî îêíà, åñëè òàêîå èìååòñÿ, èëè null, åñëè îêíî áûëî îòêðûòî ïîëüçîâàòåëåì, à íå ñêðèïòîì.

Äëÿ òîãî ÷òîáû èñêëþ÷èòü îøèáêè, ôóíêöèÿ ïðîâåðêè è îòêðûòèÿ îêíà áóäåò êðîìå âñåãî ïðî÷åãî óâåäîìëÿòü ãëàâíîå îêíî, ÷òî äî÷åðíåå óæå îòêðûëîñü. 

Äëÿ ñòàðòîâûõ ïðîâåðîê è óñòàíîâîê ìîæíî èñïîëüçîâàòü òàêîé êîä: 

var is_child = false; 
var child_window; 
function init() { 
        is_child = (window.opener != null);
        if (is_child) {
                window.opener.ready();
                ready();
        } else {
                child_window = window.open('test.html', 'child');
        }
} 
 
function ready() { 
        document.getElementById('btn').disabled=false;
} 

Äëÿ òîãî ÷òîáû êîä îòðàáîòàë, íóæíî âûçâàòü ôóíêöèþ init(), ïðè÷åì ñðàçó ïîñëå òîãî êàê áóäóò çàãðóæåíû âñå îñòàëüíûå ýëåìåíòû. Íàïðèìåð, ìîæíî ðàçìåñòèòü â ñàìîì êîíöå òåëà äîêóìåíòà (ïåðåä çàêðûâàþùèì òåãîì body) âûçîâ ýòîé ôóíêöèè, âñòàâèâ ñòðî÷êó

<script type="text/javascript"> init(); </script> 

Åñëè ñåé÷àñ îòêðûòü ïîëó÷åííûé äîêóìåíò (äà, ê ñëîâó – îí äîëæåí íàçûâàòüñÿ test.html) – òî âû óâèäèòå äâà îêíà, â êîòîðûõ êíîïêè ïîñëå çàãðóçêè äîêóìåíòîâ ñòàíóò àêòèâíûìè.

Íåêîòîðûå èç ñòðî÷åê ÿ ïîÿñíþ. 

Êàæäîå îêíî ñâÿçàíî ñî ñâîèì îáúåêòîì window. Ñîîòâåòñòâåííî, íàáîðû ãëîáàëüíûõ ïåðåìåííûõ â êàæäîì îêíå (òàê êàê ãëîáàëüíûå ïåðåìåííûå – ýòî ïðîñòî ñâîéñòâà îáúåêòà window) áóäóò ðàçíûìè. Ïîýòîìó óñòàíîâêà ïåðåìåííîé is_child ðàâíîé true â îäíîì îêíå ñîâåðøåííî íå çíà÷èò, ÷òî â äðóãîì îêíå îíà òîæå áóäåò true.

 ýòîì îòíîøåíèè îêíà àáñîëþòíî íåçàâèñèìû – âû òàêæå íå ñìîæåòå âûçâàòü ôóíêöèþ îäíîãî îêíà â äðóãîì îêíå, è òàê äàëåå. Åäèíñòâåííîå, ÷òî ìîæåò ñâÿçàòü äâà îêíà – ýòî èëè ñâîéñòâî window.opener (èëè åùå íåñêîëüêî ñâîéñòâ â ñëó÷àå ôðåéìîâ), èëè èñïîëüçîâàíèå çíà÷åíèÿ, âîçâðàùàåìîãî ôóíêöèåé open().

Òàê ÷òî ïðè îáúÿâëåíèè ôóíêöèé, ñîçäàíèè ïåðåìåííûõ è îáúÿâëåíèè êëàññîâ íå íóæíî áîÿòüñÿ «çàöåïèòü» äðóãîå îêíî – ýòî ìîæíî ñäåëàòü òîëüêî ñïåöèàëüíî. 

Êàê âû âèäèòå, ñíà÷àëà ïåðåìåííàÿ is_child ðàâíà false – òî åñòü îêíî ñ÷èòàåòñÿ ñàìîñòîÿòåëüíûì. Ôóíêöèÿ init() ïðîâåðÿåò, ÿâëÿåòñÿ ëè îêíî äî÷åðíèì – âîò ýòîé ñòðî÷êîé:

is_child = (window.opener != null); 

ß èñïîëüçîâàë ãëîáàëüíóþ ïåðåìåííóþ, òàê êàê äðóãèå ôóíêöèè òîæå áóäóò ê íåé îáðàùàòüñÿ. 

Äàëåå, åñëè îêíî îêàçàëîñü îñíîâíûì – âûïîëíÿåòñÿ îòêðûòèå íîâîãî îêíà, è ïðèñâîåíèå ýòîãî îêíà ïåðåìåííîé child_window. Åñëè ïðèñâîåíèå íå äåëàòü, òî íîâîå îêíî áóäåò íåäîñòóïíî.

 ñëó÷àå æå, åñëè îêíî äî÷åðíåå, âûïîëíÿþòñÿ äåéñòâèÿ ïîèíòåðåñíåå. 

Êîíñòðóêöèÿ  

window.opener.ready(); 

âûçûâàåò ôóíêöèþ ready() äëÿ îêíà-ðîäèòåëÿ. Ýòà ôóíêöèÿ áóäåò ðàáîòàòü ñ ãëîáàëüíûìè ïåðåìåííûìè áàçîâîãî îêíà, òî åñòü âñå äåéñòâèÿ áóäóò âûïîëíÿòüñÿ â êîíòåêñòå òîãî îêíà, êîòîðîå îòêðûëî òåêóùåå.

Ïîñëå ýòîãî âûçûâàåòñÿ òà æå ôóíêöèÿ (íà ñàìîì äåëå – ýòî àáñîëþòíî äðóãàÿ ôóíêöèÿ, òîëüêî îíà íàçûâàåòñÿ òàê æå è ó íåå òàêîé æå òåêñò – íî ýòî, ïîâòîðþñü, äâå ðàçíûå ôóíêöèè, ïðèìåðíî êàê áðàòüÿ-áëèçíåöû) äëÿ òåêóùåãî îêíà.  ýòîì ñëó÷àå ññûëêà íà window óæå íå óêàçûâàåòñÿ äëÿ óïðîùåíèÿ – ýòî è òàê ïîäðàçóìåâàåòñÿ. 

 ôóíêöèè ready() íè÷åãî îñîáåííîãî íåò – îíà ïðîñòî ïîäãîòàâëèâàåò êîä ê ðàáîòå (è âûçûâàåòñÿ òîëüêî òîãäà, êîãäà îáà îêíà îòêðûòû è âñå îáúåêòû â íèõ ñîçäàíû). Äðóãèìè ñëîâàìè, îíà óáèðàåò àòðèáóò disabled ó êíîïîê (òî÷íåå, îòêëþ÷àåò ïóòåì ïðèñâîåíèÿ ýòîìó àòðèáóòó ëîãè÷åñêîãî íóëÿ).

Ñëîæíàÿ ÷àñòü ðàáîòû âûïîëíåíà, îñòàëèñü ìåëî÷è – ñèíõðîíèçàöèÿ. 

Çäåñü ìû áóäåì èñïîëüçîâàòü óæå ïîëó÷åííóþ ïåðåìåííóþ is_child, è, â çàâèñèìîñòè îò åå çíà÷åíèÿ, èëè èçìåíÿòü ñîäåðæèìîå ýëåìåíòîâ window.opener, èëè ýëåìåíòîâ child_window

Âîò òàê ïðèìåðíî âûãëÿäèò ôóíêöèÿ ñèíõðîíèçàöèè:  

function sync_function() { 
        var value;
        value = document.getElementById('sync_value').value;
        if (is_child) {
                window.opener.document.getElementById('sync_value').value = value;
        } else {
                child_window.document.getElementById('sync_value').value = value;
        }
} 

Òóò òîæå âñå òðèâèàëüíî – ñíà÷àëà çíà÷åíèå áåðåòñÿ èç òåêñòîâîãî ïîëÿ òåêóùåãî îêíà, à ïîòîì çàïèñûâàåòñÿ â òåêñòîâîå ïîëå äðóãîãî îêíà. 

Òåêñòîâîå ïîëå èùåòñÿ ïî ID – òàê êàê ó íàñ íåò ôîðìû, òî ïîëó÷èòü äîñòóï ÷åðåç ìàññèâ forms íå âûéäåò.

Ìîæåòå ïðîâåðèòü ðàáîòó ýòîãî ñêðèïòà, îòêðûâ äâà îêíà òàê ÷òîáû îíè íå ïåðåêðûâàëè äðóã äðóãà. 

Âû ìîæåòå çàìåòèòü çàáàâíóþ âåùü – åñëè â äî÷åðíåì îêíå îòêðûòü äðóãóþ ñòðàíèöó (íàïðèìåð, ÿíäåêñ), à ïîòîì îïÿòü test.html, òî ñêðèïò ïðîäîëæèò ðàáîòó. À åñëè â òî âðåìÿ, ïîêà ÿíäåêñ áóäåò îòêðûò, ïîïðîáîâàòü ñèíõðîíèçèðîâàòü îêíà, òî áðàóçåð âûäàñò ñîîáùåíèå îá îøèáêå – íî íå íåâîçìîæíîñòü íàéòè ýëåìåíò, à îøèáêó äîñòóïà. Ýòî ñäåëàíî äëÿ òîãî, ÷òîáû ñêðèïòû èç ðàçíûõ äîìåíîâ íå ìîãëè äðóã íà äðóãà ïîâëèÿòü è ñäåëàòü ÷òî-ëèáî íå î÷åíü õîðîøåå. 

Ôðåéì êàê îòäåëüíîå îêíî

Ñåé÷àñ ôðåéìû ïåðåæèâàþò ñâîé óïàäîê (òî åñòü èõ ïî÷òè íèêòî íå èñïîëüçóåò). Åñëè âû âñå æå õîòèòå èñïîëüçîâàòü èõ íà ñâîèõ ñòðàíèöàõ, òî íåêîòîðûå ñâåäåíèÿ î ðàáîòå ñ ôðåéìàìè èç ñêðèïòà ìîãóò ïîìî÷ü. 

Ôðåéìû, ïî ñóòè, ïðåäñòàâëÿþò ñîáîé âëîæåííûå îêíà âíóòðè îäíîãî áîëüøîãî îêíà áðàóçåðà. Äëÿ êàæäîãî ôðåéìà ñîçäàåòñÿ îòäåëüíûé îáúåêò window, è âñå ôðåéìû äîñòóïíû èç ãëàâíîãî îêíà â âèäå ìàññèâà frames. Ïðè ýòîì îáðàùàòüñÿ ê ôðåéìó ìîæíî êàê ïî èíäåêñó (â ïîðÿäêå îáúÿâëåíèÿ ôðåéìîâ âíóòðè ôðåéìñåòà), òàê è ïî èìåíè ôðåéìà.

Íàïðèìåð, â òàêîì âîò äîêóìåíòå  

<html> 
        <head>
        </head>
        <frameset cols="100,*">
                        <frame name="left" src="left.html">
                        <frame name="right" src="right.html">
        </frameset>
</html> 

íóëåâîé (îí æå ëåâûé) ôðåéì äîñòóïåí êàê window.frames[0], è êàê window.frames.left

Îáúåêòû window, êîòîðûå íàõîäÿòñÿ âíóòðè ôðåéìîâ, òàêæå èìåþò ñâÿçü ñ ãëàâíûì îêíîì. 

Äëÿ òîãî, ÷òîáû ïîëó÷èòü îáðàìëÿþùåå îêíî, èñïîëüçóåòñÿ window.parent.  Äëÿ îáðàùåíèÿ ê ãëàâíîìó îêíó (èëè îêíó âåðõíåãî óðîâíÿ) èñïîëüçóåòñÿ window.top

 ñëó÷àå, åñëè îêíî íàõîäèòñÿ «ñíàðóæè» âñåõ îñòàëüíûõ (òî åñòü ÿâëÿåòñÿ îêíîì âåðõíåãî óðîâíÿ) ñâîéñòâà parent è top óêàçûâàþò íà ýòî æå îêíî. 

Îïèñàííûå ñâîéñòâà ìîæíî ïðîèëëþñòðèðîâàòü ñêðèïòîì, êîòîðûé îïðåäåëÿåò ñòåïåíü âëîæåííîñòè îêíà âíóòðè ôðåéìîâ. 

var deep = 0; 
var current = window.self; 
while (current != window.top) { 
        deep++;
        current = window.parent;
} 
if (deep == 0) { 
        alert ("Îêíî âåðõíåãî óðîâíÿ");
} else { 
        alert ("Îêíî íàõîäèòñÿ íà "+ deep +" óðîâíå âëîæåííîñòè");
} 

Çäåñü èñïîëüçóåòñÿ åùå îäíî ñâîéñòâî window – window.self. Îáû÷íî äëÿ ñðàâíåíèÿ ññûëîê íà îêíî èñïîëüçóåòñÿ èìåííî ýòî ñâîéñòâî (õîòÿ èñïîëüçîâàíèå ïðîñòî window äàåò òîò æå ðåçóëüòàò).

Ïðè ðàáîòå ñ iframe íè÷åãî ñóùåñòâåííî íå ìåíÿåòñÿ – ôðåéìû òàêæå äîñòóïíû ÷åðåç ìàññèâ frames.

Äëÿ ëó÷øåãî çàêðåïëåíèÿ ìàòåðèàëà, êàê îáû÷íî, íåáîëüøîå çàäàíèå. Îíî î÷åíü ïîõîæå íà çàäà÷ó èç ïåðâîé ÷àñòè ãëàâû, òî åñòü – ñèíõðîíèçàöèþ ôîðì. 

Íóæíî íà îñíîâå ýòîé çàäà÷è ñäåëàòü òàêóþ æå ñèíõðîíèçàöèþ, íî – âíóòðè äâóõ ôðåéìîâ. Ïðîâåðêó íà äî÷åðíåå îêíî â ýòîì ñëó÷àå, ñîîòâåòñòâåííî, äåëàòü íå íóæíî (íî íóæíî ïðîâåðÿòü, ëåâûì èëè ïðàâûì ÿâëÿåòñÿ ôðåéì). 



 íà÷àëî ñòðàíèöû



 íà÷àëî ñòðàíèöû