Kuinka saada asiakkaan tarkka selainnimi. Selainversion tunnistus - PHP tai javascript

Kiinnitä huomiota, annan asennuksen: skriptit ovat siistejä. Tiedät sen, minä tiedän sen, lyhyesti sanottuna, me tiedämme sen. Asennus tehty! Onnistuneesti. Puhutaanpa nyt niistä - suosikkikäsikirjoituksista. On mukavaa tehdä käsin jonkinlainen käsikirjoitus Java-kielellä ja antaa naapuri-lamakin päästä sen läpi, ja kun hän katsoo sitä, anna hänelle potkua. Tässä on vain bugi: matkan varrella kaikki käsikirjoituksen siistiä on jo keksitty. Jotain radikaalin uuden tarjoaminen (ainakin minulle) on jo vaikeaa, on parempi mennä juomaan olutta. Toisaalta voi helposti koota kasa toissijaisia ​​asioita, jotka lähemmin tarkasteltuna tiivistyvät pinoksi kaikkea samaa perusmenetelmiä. Ja tämä on väärin - kukaan ei tarvitse toissijaista itsessään. Lopuksi (ei lopussa, mutta lopussa!) ...

Kiinnitä huomiota, annan asennuksen: skriptit ovat siistejä. Tiedät sen, minä tiedän sen, lyhyesti sanottuna, me tiedämme sen. Asennus tehty! Onnistuneesti. Puhutaanpa nyt niistä - suosikkikäsikirjoituksista. On mukavaa tehdä käsin jonkinlainen käsikirjoitus Java-kielellä ja antaa naapuri-lamakin päästä sen läpi, ja kun hän katsoo sitä, anna hänelle potkua. Tässä on vain bugi: matkan varrella kaikki käsikirjoituksen siistiä on jo keksitty. Jotain radikaalin uuden tarjoaminen (ainakin minulle) on jo vaikeaa, on parempi mennä juomaan olutta.

Toisaalta toissijaisia ​​asioita voi helposti koota kokonainen kasa, joka tarkemmin tarkasteltuna tiivistyy samojen perusmenetelmien kasaan. Ja tämä on väärin - kukaan ei tarvitse toissijaista itsessään. Lopuksi (ei lopussa, mutta lopussa!) tuli "luova oivallus": jos asiakirjan sisällä ei voi puristaa mitään, on vaihdettava laadullisesti. uusi taso itse selainikkunan manipulointi. Ensinnäkin vähän tietoa niille, jotka unohtivat (tai eivät tienneet). V objektimalli nykyaikaiset selaimet (tarkoitan modernilla Internet Explorer ja Netscape Navigator) on kaksi erittäin mielenkiintoista menetelmää: window.resizeTo (x,y) ja window.moveTo (x,y), jotka lupaavat paljon mahdollisuuksia. Ensimmäinen tapa muuttaa selaimen "katseluikkunan" kokoa määritetyt mitat(eli x x y pikseliä), ja toinen siirtää itse ikkunaa asettamalla vasemman yläkulma pisteeseen, jossa x-koordinaatit vaakasuunnassa ja y-koordinaatit pystysuunnassa. Siten käyttämällä näitä kahta menetelmää viisaasti, voit helposti saavuttaa erittäin mielenkiintoisia tehosteita, joka kirjaimellisesti kaatoi valmistautumattoman katsojan.

Aluksi tarkastellaan yksinkertaista komentosarjaa, joka on vastuussa selainikkunan siirtämisestä työpöydällä ja heijastaa sitä näytön "reunoista":

Xenix tyylinen ikkuna

8script NK/title></head> <body onload = \»move_the_window()\»> <centerxfont face = Tiroes size = 6 color =redxi>javascript on siistiä!</i></fontx/center> </body> </html> Kun sivu on ladattu täyteen, Move_the_window-funktio kutsutaan. Se ilmoittaa kaikki tarvittavat muuttujat ja sijoittaa ikkunan työpöydän vasempaan yläkulmaan. Metodit screen.width ja screen.height palauttavat meille työpöydän arvot (leveys ja korkeus), ja niiden tiedossa pienennämme ikkunan puoleen.</p> <p>Siirrytään nyt siirtotoimintoon. Koska kaikki toiminnot tässä suoritetaan äärettömän silmukan sisällä, ikkuna jatkaa pyörimistä näytön ympäri.</p> <h2><span>Tunnista selain javascriptillä</span></h2> <p>Yritetään vierittää sitä läpi <a href="https://leally.ru/fi/word/anvir-task-manager-chto-eto-za-programma-i-nuzhna-li-ona-anvir-task-manager-prodvinutyi/">tehtävänhallinta</a> johtaa mielenkiintoiseen <a href="https://leally.ru/fi/how-to-open-file/aifon-5-s-glyuchit-sensor-reshenie-na-starom-ustroistve-vklyucheny/">erikoistehosteet</a>(Suosittelen tarkistamaan <a href="https://leally.ru/fi/windows/kakie-oshibki-nelzya-delat-v-professii-it-rasskaz-o-sobstvennom-opyte-kto-takoi-sistemnyi-administ/">oma kokemus</a>). Jos haluat silmukan toimivan <a href="https://leally.ru/fi/good-to-know/avtomaticheskoe-udalenie-kesha-polnaya-chistka-kompyutera-ot-musora/">tietty määrä</a> kertaa, vaihda <a href="https://leally.ru/fi/excel/vetvleniya-i-cikly-cikly-for-i-while-operatory-break-i-continue-volshebnoe-slovo/">kun lausunto</a> for while (var i< твое число) и добавь в конце цикла оператор i++. С помощью метода resizeTo можно делать довольно любопытные вещи. Посмотри, как можно сжать окно до размеров заглавной рамки и заставить все это, как обычно, бегать по экрану:</p> <p>Teeman kehitys</p> <p><script language = javascript> // Начинаем script блок function move_the_windows(){ // Наша стартовая функция window. resizeTo(screen.width, 25); // Сжимаем окно номер 1 window.moveTo(0,1); // Теперь помещаем его в левый верхний угол экрана window2 = ореп(\»\», null); // Создаем объект второго окна window2.document.write(\»<title> Window N2\»); // Пишем в не- го заголовок window2.resizeTo(screen.width,25); // Сжимаем его и window2.moveTo(0, screen.height-25); // помещаем в низ экрана var dy1=2; // Начальное смещение для верхнего окна var dy2=-2; // … и для нижнего var y1 = 1; // Y-координата верхнего окна var y2 = screen.height-25; // и Y-координата нижнего move(); // Теперь вызываем функцию, которая и будет двигать оба окна function move(){ // Объявляем функцию while(true){ // Объявляем бесконечный цикл if (y1>=(screen.height) || y1 <=0) dy1=-dy1; // Меняем направление if (y2>=(screen.height) || y2 <=0) dy2=-dy2; // To же для второго окна y1+=dy1; // Сдвинули первое окно по вертикали y2+=dy2; // … и второе window.moveTo (0,y1); // Нарисовали первое окно на новом месте window2.moveTo (0,y2); // Нарисовали второе окно на новом месте } // Конец нашего бесконечного цикла } // Конец функции move } // Конец функции move_the_windows // Ну, и закрываем script блок Script N2 -ikkuna 1 javascriptcool! Itse asiassa tämä komentosarja on jatkoa ensimmäiselle: uutta on kahden itsenäisesti liikkuvan ikkunan läsnäolo. Kiinnitä huomiota toisen ikkunan luomismekanismiin ja tapaan kirjoittaa HTML-tunnisteet document.writen kautta. Nyt kun olet tutustunut näihin menetelmiin, kysyt jo todennäköisesti itseltäsi kysymyksen: onko mahdollista ripustaa asiakastietokone tämän kautta hyvin javascript? No se on ihan mahdollista. Menetelmä on säädyttömän yksinkertainen: sinun tarvitsee vain avata uudet ikkunat mahdollisimman nopeasti. Tässä tapauksessa järjestelmällä ei yksinkertaisesti ole tarpeeksi resursseja, ja kaikki "jumiutuu". Toinen asia on, että mielestäni tämä primitivismi ei ole jotain todella mielenkiintoista, ja luultavasti, kun olet tutustunut tähän tammimenetelmään, et enää tuhlaa aikaasi tähän roskaan:

Useiden ikkunoiden luominen:

useita ikkunoita Itse asiassa pääsilmukan rungossa skripti yrittää avata 10 000 ikkunaa jokaisen ikkunan viittaaessa samaan tiedostoon, eli se yrittää avata GOOOOO enemmän ikkunoita vuorotellen ja niin edelleen. Järjestelmä ei yksinkertaisesti pysty selviytymään tällaisesta virtauksesta ja valitettavasti jumittuu

On hyvä, jos sivustosi toimii kaikissa tai melkein kaikissa selaimissa haluamallasi tavalla. Kaikki muuttuu, uusia versioita tulee ulos, uusia ominaisuuksia ilmestyy, ja on typerää olla käyttämättä niitä "vanhojen" vuoksi. Noin 1,5 vuotta sitten IE 6.0 (yhden sivustoni käyntitilastojen mukaan) oli joka kolmannessa IE:tä käyttävässä tietokoneessa. Minun piti ottaa huomioon hänen kanssaan, koska. IE hallitsi työpöytää, ja yli 40 % kävijöistä käytti IE:tä. Liitän tämän IE 6.0:n jakelun (huolimatta siitä, että 8. versio on jo julkaistu) ensinnäkin Windows XP:n vanhojen piraattiversioiden laajalle levinneelle Venäjällä, jotka eivät muodosta yhteyttä päivityspalvelimeen.

Nyt he asentavat aktiivisesti XP:n uudempia versioita (myös laittomasti lähes kaikkialla), joka tulee jo IE:n 7. version mukana, ja Windows 7:ää, joka tulee MSIE 8.0:n kanssa. Lisäksi IE:n piti tehdä tilaa, ja Opera nousi ykköseksi (29,8 % kävijöistä), ja IE yli 10 % hävinneen sijoittuu 2. sijalle nostaen 28,8 % kävijöistä. Samaan aikaan IE 6.0:n osuus IE:n käyttäjien kokonaismäärästä laski 34 %:sta 15 %:iin. Sulkee kolme parasta - FireFox.

Siten IE 6.0:aa käyttää nyt joka 20. käyttäjä (noin 5 %). Niiden kanssa on vielä varauduttava.

Tämän pitkän johdannon tarkoituksena on osoittaa, että kysymys siitä, tuetaanko tiettyjä selainversioita vai ei, on vakava, ja vaatii säännöllistä tutkimusta nykytilanteen ymmärtämiseksi. Se on erilainen eri alueilla, se voi jopa riippua sivuston teemasta. Ennemmin tai myöhemmin herää ajatus ilmoittaa käyttäjälle, että he sanovat, että uusia selaimia on jo olemassa (on aika alkaa käyttää niitä, ystäväni!).

Voit määrittää selainohjelman version, sen perheen ja ryhtyä toimiin sekä palvelin- että asiakaspuolella. Esimerkiksi pala javascript-koodia, jonka avulla voit määrittää mitä käyttäjä käyttää IE:n versiota, joka on vanhempi kuin 7.0

... //asiakirjan latauksen jälkeen selainversio tarkistetaan //ja toimenpiteitä tehdään ...

. . .

< / head >

//asiakirjan lataamisen jälkeen selainversio tarkistetaan

//ja toimenpiteitä tehdään

< body onload = "check_version();" >

. . .

PHP:ssä voit viitata selaimen lähettämiin otsikoihin, käyttämällä getallheaders()-funktiota hän palaa assosiatiivinen matriisi, jossa elementti sisältää tietoja selaimesta.

Joten huomasimme, että polkuja on vähintään 2. Kumpi on parempi? Kannatan sitä, että kaikki turvallisuuteen liittymättömät työt, jotka on melko helppo toteuttaa asiakaspuolella, tehdään asiakaskoneella. Nykyään usein käy ilmi, että asiakaskoneiden resurssit ylittävät huomattavasti virtuaalisten dedikoitujen web-palvelinten kyvyt. Joten anna heidän toimia niin pitkälle kuin mahdollista :).

Toisaalta javascriptit eivät välttämättä toimi asiakkaalle ollenkaan, jolloin palvelimen tarkistaminen on ainoa tapa. Tämä ilmiö on kuitenkin hyvin harvinainen tarkkoja tilastoja Minulla ei ole.

Tässä on myös "sudenkuoria". Loppujen lopuksi, jos et ota huomioon henkilökohtaisia ​​mieltymyksiäni, palvelinpuolen validoinnin suorittaminen on pohjimmiltaan oikeampi lähestymistapa. Jos vain siksi, että joissakin vanhoissa asiakaskoneissa on mahdotonta määrittää selainversiota, kuten esimerkissä näytin. Ja käsikirjoitus on monimutkaisempi. Yksi sudenkuoppia voi olla järjestelmä sivuston sivujen välimuistiin (kuten esimerkiksi drupal). Kun palvelinpuolella on päätetty, että asiakas sopii tai päinvastoin ei sovellu sivuston näyttämiseen, tämän tuloksen sisältävä sivu näytetään kaikille muille anonyymejä asiakkaita kunnes välimuistin käyttöikä umpeutuu. Tällaisissa tapauksissa jo javasctipt on ainoa sopiva vaihtoehto.

Olemme siis nähneet, että jokaisella selaimella on omat ominaisuutensa. Onko se todella niin tärkeää? Hyvin tärkeä. Lataamalla Web-sivun komentosarjalla, joka sisältää ominaisuuksia, joita selain ei tue, käyttäjä ei yksinkertaisesti näe tarkoitustasi. Selaimen yhteensopivuusongelman ratkaisemiseen on kaksi tapaa. Ensimmäinen lähestymistapa on hieman tylsä. Kehittäjä kirjoittaa kaksi vaihtoehtoa eri selaimille ja ohjaa sitten käyttäjän halutulle Web-sivulle saatujen tietojen perusteella. Tässä pieni esimerkki tällainen skenaario (listaus 1).

Listaus 1. Käyttäjän ohjaaminen halutulle verkkosivulle

Olen antanut yksinkertaistetun skenaarion olettaen, että maailmassa on vain kaksi selainta. V oikea elämä tietysti tarkennusta vaaditaan; lisäksi tarkasteltavalla skenaariolla on yksi haittapuoli - se vaatii ylimääräisten Web-sivujen luomisen alle eri selaimet. Toinen tapa on käyttää if-ehtolauseketta. Katsotaanpa esimerkkiä, jossa käytämme appName-ominaisuutta. Internet Explorer kutsuttaessa annettua omaisuutta merkkijono palautetaan Microsoft Internet Explorer, selaimessa Mozilla Firefox- Netscape (listaus 2).

Listaus 2. Toinen tapa tunnistaa selain

Tämä esimerkki määrittää ensin selaimen nimen, sitten sen version ja näyttää sitten tiedot tuettujen ominaisuuksien avulla. Kuten tästä skenaariosta näkyy, Netscape Navigator käyttää pixelDepth-ominaisuutta näytön värisyvyyden määrittämiseen, kun taas Internet Explorer käyttää colorDepth-ominaisuutta.

MERKINTÄ

Hyviä uutisia kehittäjille. Mozilla-selain Firefox tukee molempia näitä ominaisuuksia.

Huomaa, että meidän ei todellakaan tarvitse muistaa koko palautettua merkkijonoa. Käyttämällä indexOf-funktiota määritämme paikan yksittäisen sanan merkkijonossa. Tämä riittää käsikirjoituksen toimimiseen. Älä vain unohda, että Netscape-sovelluksen nimi ei ole vain Mozilla Firefox. Siellä on myös esimerkiksi Netscape Navigator -selain (onko sellaista vielä???).

Vaikka sovimme, että blogissani kaikki esimerkit testataan vain Internet Explorerilla ja Mozilla Firefoxilla, annan silti pienen esimerkin käytetyn selaimen version määrittämisestä. Vähän teoriaa. Kirjoita kokonaan universaali toiminto, joka määrittää käyttäjän asentaman selaimen, on mahdotonta. Heitä on liian monta eronnut, ja jokaisella selaimen kehittäjällä on oma näkemyksensä kohdemallista. Voit keskittyä vain suosituimpiin ja jättää muut huomiotta.

Joten Internet Explorer käyttää mallissaan rakenteita, kuten document.aii, ja Netscape Navigator käyttää document.layers -tiedostoa. Molemmat näistä rakenteista eivät ole vakiomuotoisia, joten vältä niiden käyttöä Web-sivuillasi. Vanhat versiot Opera selain myös syntiä ei-standardin document.aii.item rakentamisen kanssa. Mutta uusimmat versiot kaikki nämä selaimet ovat menneet askeleen pidemmälle ja tukevat oikeaa document.getEiementByid-rakennetta (Mozilla Firefox yritti aluksi noudattaa standardeja). Siksi monet skriptit käyttävät jotain tämän kaltaista (listaus 3).