Наиболее распространенные задачи с HTML атрибутами. Установка всего добра

Viber OUT 15.02.2019
Viber OUT

Представляем вашему вниманию новый курс от команды The Codeby - "Тестирование Веб-Приложений на проникновение с нуля". Общая теория, подготовка рабочего окружения, пассивный фаззинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое.


WebBrowser работа с html атрибутами

В этой статье хотелось бы показать несколько простых операций с HTML атрибутами , которые можно выполнить с помощью класса webBrowser. Надеюсь, что Вы уже работали с данным классом или одноименным элементом управления и уже знаете, и . Поэтому сразу же переходим к основной теме статьи.

Наиболее распространенные задачи с HTML атрибутами

И так для начала создадим Windows Forms приложение, а затем добавим на форму: кнопку, элемент управления webBrowser (wb) и textBox, в который будем выводить изменения, которые произойдут в документе. После чего создадим небольшую, простенькую HTML страницу, которую будем использовать, в качестве шаблона для приведенных ниже примеров.

Здесь же помещу код, который необходимо добавить и выполнить в самом начале любого примера, чтобы получить все HTML элементы с тэгом «p».

HtmlElementCollection paragraphs; paragraphs = wb.Document.Body.GetElementsByTagName("p");

Так же обратите внимание, для того чтобы найти, создать, изменить или добавить атрибут class, Вам всегда необходимо указывать имя classname, более подробно об этом можно прочитать .

Если Вам нужно проверить или убедиться в том, что в HTML документе действительно произошли какие-то изменения, то в самом конце любого из примеров добавьте строку, которая позволяет вывести содержимое тега body.

TextBox1.Text = wb.Document.Body.OuterHtml;

Порядок действий:

  • Поиск элементов с тегом p
  • Код с каким-либо действием над HTML атрибутом
  • Вывод изменений в textBox

Ну, а теперь переходим к задачам.

Как добавить HTML атрибут

В классе webBrowser существует универсальный метод SetAttribute, с помощью которого Вы можете: создать, изменить, удалить или добавить HTML атрибут. Данный метод принимает два параметра: имя атрибута и его значение. Рассмотрим несколько простых примеров.

Добавление нового атрибута по имени class к элементу с тегом «p».

//1. Ищем все элементы с тегом p //2. Создаём и добавляем атрибут class foreach (HtmlElement par in paragraphs) { par.SetAttribute("classname", "one"); } //3. Выводим содержимое тега body

Результат

Если у элемента уже присутствует html атрибут, но его имя отличается от того имени атрибута, который Вы хотите добавить, то в таком случае так же будет создан и добавлен новый HTML атрибут. Например, внесём небольшое изменение в наш шаблон:

Снова выполним выше описанный код и получим следующий результат:

Если же при добавлении нового HTML атрибута имена совпадают, то тогда изменяется значение у существующего атрибута.

Выполним тот же самый код и посмотрим на результат.

csharp

Как изменить HTML атрибут

Как уже говорилось чуть ранее, для того, чтобы изменить HTML атрибут, нужно так же воспользоваться методом SetAttribute. Например, снова сделаем небольшое изменение в шаблоне:

А затем изменим текущее значение атрибута class.

Foreach (HtmlElement par in paragraphs) { if (par.GetAttribute("className") == "one") { par.SetAttribute("classname", "two"); } }

Проверка в данном примере используется лишь для демонстрации того, как например, стоило бы поступить, если бы у элемента с тэгом «p» было бы несколько атрибутов и Вам нужно было бы найти какой-то конкретный из них. В данном же примере проверку можно не использовать.

Если Вам нужно изменить название атрибута, то тогда Вам сначала нужно создать новый атрибут, а затем удалить старый или наоборот.

Как удалить HTML атрибут

Для того чтобы удалить HTML атрибут, нужно в метод SetAttribute, в качестве второго параметра, передать пустое значение, например, снова не много изменим наш шаблон.

Foreach (HtmlElement par in paragraphs) { par.SetAttribute("align", ""); }

Результат:

Как получить значение атрибута

Чтобы получить значение HTML атрибута необходимо воспользоваться методом GetAttribute, в который необходимо передать имя атрибута. Например, сделаем небольшое изменение в шаблоне.

А затем получим значение атрибута.

Foreach (HtmlElement par in paragraphs) { string valueAtr = par.GetAttribute("align"); }

Результат: left.

На этом всё, если есть вопросы, то оставляйте их в комментариях.

баловство (обратная сторона)

понимайте и любите

Народ я к вам отношусь толерантно, но ни один из вас не будет моим мужем. Прощайте и останьтесь мужчинами, даже если вам нравится одевать наше белье. Мы готовы для вас делать все, мы вас любим, вас мало, и если вы в состоянии любить, кормить, содержать свою любимую женщину, но тебе хочется ходить в ее одежде... поверьте мне она вас поймет если любит. Я сама для себя узнала очень много, но за ним как за каменной стеной. Может он хотел одеть мое белье, может мне хотелось, чтобы он стал мной (и понял меня). Спасибо Вам, но мне хочется, чтобы ВЫ для нас были мужчинами, а мы не пожалеем груды своих шмоток лишь бы ВЫ были с нами.

Ну а теперь тот это день закончился

Аккуратно приподняв одеяло на ее груди я начал медленно отодвигать его в сторону. Ее тело в расстегнутом на груди халатике открывалось все больше и больше. Через несколько секунд одеяло рухнуло на пол. Да с того момента как я ее укрыл, она даже не шевельнулась. Все так же в низу раскинутые полы халата, из-под которых видны кружевные трусики и ножки крестиком. Только теперь халат на груди был распахнут и в свете телевизора виднелся бюстгальтер, который прикрывал грудь моей любимой. Осторожненько я расстегнул оставшиеся пуговки и раскинул полы халата. Теперь практически ничего не мешало мне ласкать это родное тело. Я нагнулся над ним, закрыл глаза и начал целовать его сверху вниз. Плечи, грудь, живот, чуть-чуть задержавшись на пупке я сунул в него язык и поиграл им немножко с пупком. Потом еще ниже и мои губы почувствовали кружева трусиков, а под ними бугорок. Руки мои скользили по лайкре чулок пытаясь добраться до ее цветочка. Но ножки сжатые крестиком не давали этого сделать. Оторвавшись от сладкого места я спрыгнул с кровати обошел ее с другой стороны и аккуратно придерживая за икру попытался приподнять левую ножку. Она поддалась. Крестик был распутан. Теперь надо было отодвинуть ее как можно левее. Не так далеко, но все же мне удалось и бутончик между ног начал раскрываться. Так и стоя в торце кровати моя рука скользнула по внутренней стороне к любимому цветочку. Нежно прикоснувшись к нему я поласкал его пальчиком через трусики чуть-чуть надавливая внутрь. В моих трусиках набухало все больше и больше. Теперь надо было отодвинуть правую ножку чтобы цветочек раскрылся сильнее для ласки. Погладив ее бедрышко, коленку, икру и засунув руку под пяточку я начал приподнимать и правую ножку одновременно отводя ее в сторону. Да там было уже достаточное расстояние. Теперь только трусики прикрывали вожделенный цветочек. Их просто надо сдвинуть в сторону. Я хочу поиграть с ним язычком. Сев на коленки между ее ног мои губы сами потянулись к тому месту. Поглаживая ее ножки я опустил свою голову к полураскрывшемуся цветочку. Осторожно сдвигая трусики я аккуратно зацепил их за естественный бугорок и вся промежность моей любимой открылась. Мои губы осторожненько прикоснулись сначала к одной ноге, потом к другой и еще с большей осторожностью они коснулись того места где была ее пещерка. Мой язычок выпрыгнул изо рта и начал аккуратненько работать. Возбуждению моему не было предела. Приподняв голову я взял ее клитор в руку и продвинул к своим губам. Я целовал его в самый кончик играл с ним язычком и чуть-чуть покусывал. Он стал тверденьким, а моя девочка даже не проснулась. Я опять спустился ниже и целовал, целовал и целовал, играл язычком пока не почувствовал, как моя попка уже начинает непроизвольно двигаться в верх вниз. Мои руки уже достаточно сильно сжимали ее грудь. Я уже не мог сдерживать себя я хотел в нее войти. И тут я понял, что она проснулась ее ноги медленно сгибались в коленках и раздвигались все сильнее, она тихонько подмахивала, а руки ее теребили мои волосы прижимая мою голову. Через некоторое время я услышал ее шепот:
- Иди скорее ко мне, мой хороший... Я хочу тебя...
Я приподнялся над ее телом и медленно целуя ее тело стал подниматься к ее губам. Она тихо постанывала. Я поцеловал ее в губы и услышал разгоряченный шепот:
- Войди в меня.
Упираясь одной рукой в кровать другой я схватил «свой» напряженный член и начал судорожно стараться ввести его в «ее» цветочек.
- Не торопись, - услышал я, - сначала просто по губкам поводи, а потом я тебе помогу.
Мелькнула мысль как я мог про это забыть ведь «ей» это нравиться.
Ее руки опустились вниз и аккуратно раздвинули лепесточки. Я начал вперед-назад водить им между ними. Она постанывала, а я сопел, рука, которая упиралась в кровать уже с трудом сдерживала вес.
- А теперь тихонечко входи, - услышал я и стал вводить в «нее» «свой» член.
Задача была не из легких. Я изгибал «свой» член в неимоверную загогулинку, она раздвигала ноги и губки как могла. И и и и. Чудо свершилось. Я почувствовал как член зацепился за дырочку. Теперь можно было упереться двумя руками. Он входил все глубже и глубже. И наконец он вошел в нее на всю длину. Ее руки сильно сжали мои ягодицы ноги обхватили мои бедра она застонала от удовольствия, а я начал с силой вгонять «свой» член в нее. Она в это время изогнула спинку и судорожно начала подмахивать. Я начал задавать ей не быстрый темп и через некоторое время наши движения стали более ритмичными и двигались мы на встречу друг другу все чаще и чаще. Волна за волной накатывали на меня и мне очень хотелось, чтобы мощная струя «моей» живительной влаги выплеснулась ей на живот. (честно признаться я уже кончила пару раз). Но я ждал вгоняя его все быстрее она уже не стонала а скулила.
- Еще мой хороший... еще... еще... еще...
Силы были на исходе и такой бешеный темп мне долго не выдержать. Ее ноги в чулках скользили по моим бедрам то вверх, то вниз, то с силой сжимая их, то раскидываясь в разные стороны. От очередного наплыва мой мозг начал затуманиваться.
- Еще родной мой, сильнее, сильнее, да! Да! ДА!
И сквозь окутывающий туман я услышал ее жаркий стон:
- В меня пожалуйста, родной мой, в меня!!! Да, мой хороший да! Да! ДА!
Я почувствовал как «из меня» извергается поток живительной влаги и наполняет «ее» цветочек. Она с силой несколько раз подо мной дернулась, я помог ей вогнав его как можно глубже. Вот это кайф когда кончаешь хором. Я приподнялся и хотел его вынуть.
- Полежи еще немножко, дай побалдеть, - услышал я ее голос.
Я замер на ней ее руки хаотично гладили меня по спине, ноги гладили мои ноги. Это класс когда тебя гладят по голым ногам ногами в чулках. Да нас мальчиков в этом можно понять!
- Мне тяжело, - услышал я и быстренько приподнялся на локтях.
- Иди скорее в душик, а потом я, - прошептала моя девочка.
Поцеловав ее в губы я аккуратненько достал «свой» орган из ее цветочка, спрыгнул с кроватки и пошел в душ. Сил у меня не было ни каких, комнаты качались. Я повернулся и посмотрел на кровать, моя роднушка лежала раскинув руки и ноги, а по лицу у нее блуждало удовольствие.
Прохладный душ восстановил мои силы, в дверях я столкнулся со своей девочкой, она была уже в одних трусиках, но выглядела не менее сексуально. Чмокнув ее в щечку я пошел в постельку. Было время подумать а вопрос был один:
- Как она успела сообразить, что у нее дни не залетные?
Это вопрос я задавал себе и не мог найти ответа. Через некоторое время она вернулась, скинула с себя полотенце. В тусклом свете телевизора ее попка была обалденная. Одев чистые трусики и пижамку она улеглась рядом.
- Дай на плечико лягу, - услышал я ее просьбу.
- Конечно, - ответил я. - А скажи мне, солнышко, как ты так быстро посчитала, что у тебя дни не залетные?
Они улыбнулась, встала с кровати сунула руку в пиджак и достала оттуда календарик.
- Я же у тебя умничка, - сказала она чмокнув меня в щеку.
Я отодвинул руку, и она улеглась ко мне на плечико. Ее рука прыгнула ко мне в трусики и нежно теребила мне лобок. Уснули по-моему мы вместе.

Была пятница, конец рабочей недели. Собираясь домой в очередной раз заглянула на мыло нового ничего не было. Глаза тупо уперлись в последнее письмо от Полины. Решила еще раз перечитать. Откинулась в кресле, перечитала. Зацепило. Решила перечитать творение любимого. А все-таки неплохо у него получилось. Правда когда он входил в меня не скажу, что в тот момент я испытывала те же чувства что и он... Расслабившись, я закрыла глаза и постаралась представить как я вхожу в его(ее) прекрасный цветочек. Мне очень захотелось почувствовать как напрягается мой член. Сильно сжав ноги я почувствовала, как напрягается природой данный нам остаток того чего в достатке у моего любимого. Я открыла глаза мне очень хотелось увидеть, как он выпирает под юбочкой, но увы, чудес на свете не бывает. Тем не менее, я очень возбудилась или -лся схватив со стола мобильник я судорожно стала тыкать в кнопки я хотела услышать его голос. Хотя нет, не так я хотел услышать ее голос. «Да любимая!» услышал я в трубке. Меня это возбудило еще и еще.
- Девочка моя, ты сегодня долго? - спросил я в надежде услышать нет.
- Я ведь тебя предупреждал, - после некоторой паузы услышал я ее ответ.
- Нет, не так! - сказал я, в ответ пауза и:
- Я перезвоню...
Пошли минуты ожидания... Возбуждение не только не прекращалось, а и нарастало!!!
Три, пять, семь, десять минут... Ну наконец-то труба заверещала. Это она или он сейчас все выяснится.
- Привет, мой хороший! Я ведь тебя предупреждала, что у девочки с работы день рождения и я задержусь.
- Да, моя девочка, прости я забыл, - ответила я, добавив. - Много ни пей! Пьяная девочка одному месту не хозяйка, - добавила я его коронную фразу.
- Ты же знаешь... кроме тебя ни-ни, - ответила уже раздражающая меня трубка моей фразой.
Вот облом ведь точно он говорил. Хотя и игру принял... Но мне-то от этого не легче. От возбуждения не осталось и следа. Одно раздражение... Планов было громадье, а в итоге даже ужин придется готовить самой.
По дороге домой тупо купила пельменей. Зайдя в квартиру раздражение только увеличилось. Я надеялась, что после нашего разговора она свалит и мероприятия. Да щщааас. Там ведь наливай да пей...
Скинув плащ и туфли я зашла в спальню переодеться в домашнее. Вытряхнув свое тело из сарафана и водолазки накинула халатик. Глаза уперлись в его футболку.
- А ведь не так часто она бухает на стороне, да и не напивается, - скользнула в голове мысль.
Стоп!!! Она... Блин я почувствовала как потянуло внизу живота... Я опять захотела.
Так халат и бюстик на стул к сарафану и водолазке. Бусы тоже на фиг. Одеваю его футболку. Нет опять не так. Свою футболку. Трусики, чулки, скидываю с себя на тот же стул. Так теперь его белье. Открываю ящик хватаю первые попавшиеся трусы, носки, натягиваю все это на себя. Класс... Теперь спортивные штаны. Все комплект. Возбуждение стало спадать в голове крутились только две мысли:
- Лишь бы она не сильно набухалась, а то точно будет для меня облом и как увидеть его девочкой.
Зайдя на кухню увидела пельмени. Тупо отваривать их уже не хотелось. Как там он их готовит в горшочках? Вернулся в комнату залез в комп. Так вот рецепты, которые я сохранил (буду последовательной до конца). А вот и они. Ну не так и сложно только долго. Хотя нужно чем-то себя занять, а то умру от ожидания. Лучше начать с того, что хлопнуть рюмочку. Так это уже его слова. Очень хорошо вхожу в образ. Может и в трусиках после этого чего то напряжется...
Беру водку наливаю грамм сто и бадяжу это колой. Делаю глоток. Гадость как он... нет я это пью.
Но это мой напиток. Ладно буду понемножку может осилю.
Прошло около полутора часов с момента первого глотка. Напиток уже не казался мне таким отвратительным. Да и не первый стаканчик уже был. Правда водки я наливал чуть-чуть.
Стол накрыт, еда готова. Ну и где же она бродит. Не выдерживаю набираю телефон. Долго не берет трубку. Наверное набулькалась. Вдруг на той стороне совершенно трезвый голос:
- Да, мой хороший.
- Чего трубку долго не брала, - решил буркнуть я.
- Что ты, мой любимый. Просто там шумно я увидела что ты звонишь и решила уединиться, - услышал я в ответ. - Через 15 минут буду дома мой хороший! - да разговор был исчерпан оставалось ждать.
Я положил трубку. Игра продолжалась. Мысленно мои руки уже гладили ее ножки в чулках.
В ожидании своей возлюбленной я кружил по комнате. И тут меня осеняет мысль. Дабы ускорить процесс я возвращаюсь в спальню и вижу нелепо сваленные свои (нет теперь ее) вещи.
Аккуратно сложив на сиденье стула лифчик, трусики и чулочки я обратил внимание, что белье то в котором она была в тот первый раз. Ну что даже лучше, по-моему оно ей нравиться. Правда она тогда была в колготках, а сегодня в чулках в мелкую сеточку, да и сверху было одето что-то другое. Ну и ладно в чулках, черном сарафанчике и белой водолазочке она не менее секси. Накрыв белье приготовленное на стуле аккуратно повешенными на спинку сарафаном и водолазкой я вынес стул в коридор и поставил перед входной дверью. Теперь у нее не должно быть и тени сомнения, что она сегодня будет моей.
Ну где же она!
Слава богу в двери щелкнул замок. Я слышу шелест снимаемой куртки блин да не куртки а ее белого плащика. Теперь небольшая пауза должна быть ей надо одеться...
Ага обломись...
Шлеп-шлеп, да он заходит на кухню в костюме и галстуке. Да дура я наивная я надеялась, что он думал об это с моего первого звонка. Фигушки вам. Видимо он думал об этом только во время моих звонков. Ладно будем спасать ситуацию.
Зайдя на кухню и увидев меня в его одежде видимо в его (нет, нет и нет сегодня все-таки в ее голове какие-то мысли проскочили). Я заметил как она немного смутилась. Надо атаковать...
Она потянулась ко мне, чтобы поцеловать, но я достаточно уверенно ее остановил со словами:
- Солнышко мое, зачем ты одела мой костюм, ты же знаешь я люблю только тебя такой какая ты есть!!!
Тут наконец-то в ее голове все файлы сложились. Ее глазки опустились и я услышал.
- Прости, родной, я прикольнулась.
- Повесь его обратно на стул в коридоре, родная моя, - сделал я ей подсказку.
- Да, дорогой! - на лице проскользнула улыбка.
Все через минуту все пойдет по моему. В ванной зашумела вода. Нашла время полоскаться, я есть хочу, я ее хочу, а она намывается. Но все прошло гораздо быстрее, чем я думал, хотя и заняло минут десять-пятнадцать. Теперь я явственно слышу как в коридоре идет борьба с бюстиком. Снизу живота опять потянуло или еще ниже, да пусть он напрягается сейчас она придет и можно будет залезть к ней под юбочку. Блин ну чего она поперлась в спальню. Уже физически я чувствую как у меня в штанах что-то набухает. А нет уже возвращается.
- Привет, дорогой! - услышал я и растаял, сейчас она подойдет и поцелует.
Она остановилась на входе. Посмотрела на стол.
- Какой ты у меня хороший! - я поплыл но в воздухе повисла пауза.
- Хоть бы поцеловала, - сказал я.
Она повернула голову, языком изнутри оттопырила свою щеку... Да это точно она. Оставалось встать и подойти, чтобы чмокнуть в эту щечку. Я встал со стула подошел к ней чмокая в щечку, моя рука скользнула к ней под подол стараясь погладить ее цветочек, но ее попка отодвинулась назад, а рука перехватила мою и вытащила ее от туда со словами:
- Позже, дурашка мой хороший!
Ну точно она, ничего в этой жизни не поменялось. Развернувшись она пошла в спальню. Я встал в ожидании. Она сняла с себя сарафан и водолазку и накинула халатик.
- Ты чего подглядываешь, что-то новое увидел что ли?
- Да нет, - потупился я и зашел на кухню.
Следом зашла она и уселась на мое место. Я сделал замечание она извинилась и пересела.
- Мне две штучки, - сказала она, - я ведь сытая.
- Как скажешь, - ответил я, понимая что и такие диалоги у нас бывают.
Я достал стакан насыпал лед налил виски и поставил перед ней.
- Дорогой, можно я сегодня водочки?
- Нет!!!
(виски он терпеть не может, но игра так игра).
Минут сорок прошло мы покушали, поболтали, я периодически пытался залезть ей под халатик и чем больше проходило времени и чем больше было выпито ее сопротивление становилось все более вялым. Язычок ее уже прилично заплетался. Ну сам дурак, что не проконтролировал она ведь и до этого видимо водочку пила. Наконец она встала подошла ко мне.
- Спасибо, любимый, - услышал я, и ее губы потянулись к моим.
Моя рука скользнула под халатик быстро скользнув по кружевам чулок уперлась в вожделенное место. В тоже время ее рука уже залезла ко мне в штаны и схватив складочку на лобке начала ее двигать в зад в перед. Я уже почти физически почувствовал в штанах напряженный член. Я балдел от ее ласк. Мне очень захотелось дать ей в рот. Оторвавшись от поцелуя я прошептал:
- Он хочет в родной ротик, любимая, - и начал нежно давить ей на плечи стараясь, чтобы она встала на колени.
Она потянулась к моему уху ответила:
- Позже, мой хороший, - при этом выпрямилась и добавила: - Убери на кухонке, солнышко мое, - понятно отказать я уже не мог и занялся этим гнусным делом.
Она встала прошла в комнату и плюхнулась в кресло. Но уже через несколько секунд встала и пошла в сторону спальни.
- Уж не спать ли ты, солнышко мое? - спросил я.
- Нет, любимый. А где моя сумочка?
- В коридоре.
Мне стало интересно чего она хочет, и я пошел за ней. Она открыла сумку и стала в ней рыскать. Я ненавязчиво поинтересовался чего она потеряла. Она ответила, что салфетки для интимной гигиены. Писать очень хочется, а мыться потом сил нет.
- Карманчик с боку, - подсказал я.
Достав их она пошла в сторону туалета. Я за ней.
- Да не расстраивайся, любимый, все будет правильно.
Она прикрыла за собой дверь оставив небольшую щелочку. Повернулась попкой к унитазу приспустила трусики и присела писать. Это все что я хотел видеть, чтобы она села. Я вернулся на кухню закончить начатое. И в этом была моя ошибка. Минут через пять я заглянул в комнату, но там орал телевизор в гордом одиночестве, а в спальне не раздевшись, не укрывшись лежа на спине уже седьмой сон видела моя заинька. Я подошел откинул полу ее халата ее ножки были чуть раздвинуты. Я попытался погладить ей между ног. Ее рука отдернула мою, ноги сложились крестиком и я услышал:
- Укрой меня пожалуйста.
Мне ничего не оставалось как выполнить ее просьбу. Ведь я ее очень люблю. Я укрыл ее одеялом. Вернулся на кухню и закончил начатое. Досмотрел какой-то фильм. Начал смотреть второй и решил, что это я могу сделать и в спальне хоть ручку положу на свою зайку. Зайдя в спальню я включил телевизор разделся и оставшись в одних трусиках залез к ней под одеяло. Очень осторожно, чтобы не разбудить я придвинулся к ней и положил руку на ее грудь. До меня донесся запах ее духов он был восхитительным, он возбуждал. Мне уже было не до фильма. Я начал тихонечко поглаживать ее грудь сквозь тонкий шелк халатика я чувствовал кружавчики ее бюстика. Возбуждение мое нарастало я аккуратно расстегнул на ней халатик. Нет это уже не возбуждение, я безудержно ее хочу. Я вылез из-под одеяла и встал перед ней на коленки. Теперь я уже хотел видеть не только ее любимое личико и лямочку бюстика которые торчали из-под одеяла, я хотел видеть и ласкать все ее тело...

Глава 9. JavaScript: баловство или необходимость?

Вопрос поставлен так не потому что автор книги что-то имеет против баловства. По некоторым поверьям весь наш мир есть не что иное, как баловство, мимолётная прихоть, игра какого-то могучего разума. Иногда в Сети можно встретить довольно любопытные вещи, написанные на JavaScript, - например, игру в тетрис. Но задачи нашей суровой и простой, как кирпич, книги требуют иного; сам стиль её требует освещения вопросов об html-скриптах с точки зрения пользы, удобства людей, просматривающих веб-страницы.

Самый главный скрипт

Наша борьба с таблицами в предыдущей главе вскрыла одну из важнейших проблем html-писателей: всё, что мы напишем, будет просматриваться пользователями не в идеальной среде, а на конкретных браузерах (от англ. browser - «браузер», обозреватель). То есть все спецификации - HMTL, CSS - это набор неких «усреднённых» правил, которые должны работать (являются рекомендациями). Но у разработчиков веб-обозревателей есть свои представления о том, как следует трактовать написанные нами html-тэги и правила CSS.

Поэтому любой веб-сайт, активно использующий на своих страницах CSS, обязательно вставляет на страницы скрипт, пытающийся определить, на каком браузере пользователь просматривает страницу. Однако и это не всегда решает проблему. Народ давно спорит о том, как именно следует определять тип браузера, потому что не все методы тут одинаково хороши, да ещё и некоторые браузеры пытаются зачем-то выдавать себя за другие (умышленно выдавать проверяющему скрипту неверную информацию).

Вот как можно получить информацию о браузере:

var agent = navigator.userAgent.toLowerCase(); document.write(agent);

Запишите этот код в файл browsr01.html (файл есть на CD в папке omne\js1, а также по адресу: omne/js1) и откройте файл в браузере. Интернет Эксплорер версии 5 напечатает на вашей странице следующую строчку:

mozilla/4.0 (compatible; msie 5.01; windows nt 5.0)

Браузер Mozilla Firefox - другую:

mozilla/5.0 (windows; u; windows nt 5.0; ru; rv:1.8) gecko/20051111 firefox/1.5

Мы смотрим на две разные строки и, анализируя их содержание, находим разницу. Примерно то же самое можно делать с помощью программы, написанной на JavaScript: надо специальной функцией проанализировать, распознать полученную строку, которую мы занесли в переменную agent. Эта функция (на самом деле не функция, а метод объекта String, но пока это неважно) называется indexOf() и используется так: Строка1.indexOf(Строка2). «Строка1» - строка, в которой надо найти последовательность символов; «Строка2» - последовательность символов, которую мы хотим найти в «Строке1». Важно подобрать правильное слово для поиска. Если мы для идентификации браузера будем искать, например, слово mozilla , то не сможем отличить IE от Firefox, потому что в обеих строчках искомое слово есть. Поэтому для опознания IE будем искать в названии браузера слово msie , а для опознания Firefox или SeaMonkey - слово gecko . Добавьте к первоначальному коду скрипта следующие строчки и сохраните новый текст в файле browsr02.html:

If (agent.indexOf("msie") > -1) document.write("
Internet Explorer"); if (agent.indexOf("gecko") > -1) document.write("
Gecko");

Попробуйте открыть файл browsr02.html в разных браузерах и посмотрите, что будет написано на странице.

Распознавание браузера необходимо не только для коррекции очень сложного веб-дизайна, но и для обычной, отнюдь не затейливой html-вёрстки (размещения текстов и картинок на странице). Разные браузеры могут отображать по-разному даже очень простой фрагмент. Допустим, мы решили заключить в рамку определённого размера один заголовок и один абзац из этой книги, и в предварительной отладке использовали Firefox. После несложной работы (результат - файлы browsr03.html и js1.css) мы в этом самом Firefox"е видим то, что хотели получить и успокаиваемся:

Глава 1. Создание вашей первой HTML-страницы

Потом мы (так, на всякий случай - ведь на странице не было ничего такого !) открываем тот же файл в Интернет Эксплорере, и вдруг видим, что наша простая вёрстка из двух абзацев куда-то «поехала»:

Глава 1. Создание вашей первой HTML- страницы

Что мешает вам создать веб-сайт и поместить его в Интернет? На этот вопрос можно найти довольно много ответов. Точнее, можно найти много причин, по которым создание интернет-страницы кажется вам невероятно сложной задачей.

Вроде и не очень большая беда - заголовок занял две строчки, текст абзаца немного сместился... Но чувствовать мы себя будем неуютно: получается, что мы не можем с уверенностью размещать материал на странице так, как нам надо; к тому же, если материала будет больше, вид страницы может измениться довольно существенно.

Наш фрагмент отображается в обозревателях по-разному, потому что Интернет Эксплорер считает ширину блочных элементов вместе с величиной padding и толщиной border , а Gecko (и Opera) исключают из размера блока padding и border . В стилевом файле js1.css мы задали ширину раздела div.b1 в 29em, а когда добавили к этому разделу рамку и отступы содержимого от краёв (padding), обозреватели Gecko оставили ширину полезной площади прежней - 29em и дорисовали отступы в 1em и рамку толщиной 0.4em вокруг раздела, увеличив тем самым его общую ширину на 2.8em. Интернет Эксплорер же втиснул рамку в заданную ширину 29em, чем фактически уменьшил ширину полезной площади на 2.8em. Вот строчки и «поехали»...

Дело, очевидно, можно исправить, увеличив ширину раздела div.b1 на ушедшие на рамку и padding 2.8em, то есть задав её в 31.8em. Тогда в IE заголовок уместится в одну строку, и остальной текст будет выглядеть, как задумано. Но в Gecko ширина раздела тоже увеличится на 2.8em (а она уже была нормальной) - и строчки опять «поползут». Вот примерно для таких случаев и существует решение - с помощью скрипта привязывать к странице разные CSS-файлы, в зависимости от типа браузера. Создайте новый стилевой файл js2.css с точно таким же содержимым, что и в js1.css, затем измените в нём ширину раздела div.b1 с 29em на 31.8em. Добавьте также в файле js1.css (для обозревателей Gecko) к правилам для body font-size :16px - таково в IE значение размера шрифта по умолчанию, такой же размер должен быть и в других браузерах (значение по умолчанию в них не совпадает со значением в IE). Затем создайте новый файл browsr04.html с точно таким же содержимым, как в browsr03.html, и переделайте скрипт в файле browsr04.html на следующий:

var agent = navigator.userAgent.toLowerCase(); if (agent.indexOf("gecko") > -1) document.write(""); if (agent.indexOf("msie") > -1) document.write(""); else document.write("");

Это вполне рабочий скрипт, вы можете взять его за основу для использования на страницах вашего интернет-сайта.

Как это работает

Скрипт - это, скорее, жаргонное название, по-научному его обычно называют «сценарием» (от англ. script - «сценарий»). Так вот, скрипт начинает работать по той же причине, по которой расставленные вами html-тэги и записанные правила CSS превращаются в видимые глазом изменения шрифта и цвета страницы. Эта причина - браузер: когда программа просмотра интернет-страниц находит в html-тексте метку , она (программа) делает на экране абзацный отступ по правилам, найденным ею в соответствующем файле CSS. Когда браузер находит в тексте html-страницы метки ..., всё, что находится между этими метками, он рассматривает как команды, написанные на языке JavaScript, и пытается эти команды выполнить.

Например, если мы запишем в html-текст (между соответствующими обозначениями начала и конца скрипта) команду скрипта document.write(«Привет!»), браузер при открытии документа выведет на экран слово «Привет!».

Так же можно заставить браузер вставить в текст страницы невидимую глазом запись , привязывающую к странице файл CSS. Эта запись получается невидимой по самой своей природе: браузеры обучены рассматривать текст, заключённый в тэге , как определённую инструкцию, не предназначенную для вывода на экран. Невидимая на экране команда JavaScript вставляет в текст страницы невидимую глазом инструкцию - и вид страницы изменяется. Всё просто.

Красота решения

На языках HMTL, JavaScript, так же, как и на русском языке, можно описать одни и те же предметы по-разному. Мы не планируем в этой книге вдаваться в стилистические тонкости, поэтому понятие «по-разному» попытаемся конкретизировать, сузить. Мы будем считать, что разные решения возникают, в основном, от борьбы двух тенденций, двух не всегда осознаваемых устремлений человека: 1) экономия мыслительных усилий; 2) экономия материала. Например, у меня в голове (или в душе?) такая борьба началась в тот самый момент, как я написал для этой книги скрипт, позволяющий менять оформление страницы в зависимости от браузера.

Сам скрипт я написал очень быстро (потому что издатель торопил с текстом книги). Но потом меня стала мучить совесть, и я решил, не смотря на спешку, всё-таки скрипт немного усовершенствовать. То есть укоротить. Потому что в спешке думать было особо некогда, и пришлось, из экономии мыслительных усилий, писать «простым», внешне очевидным, но не самым оптимальным способом.

Если посмотреть на текст скрипта из файла browsr04.html повнимательней, можно заметить, что строчка «document.write("");» повторяется в нём три раза почти без изменений. Отличаются эти три строки только одной цифрой в имени файла: js1.css - js2.css. Возникает вопрос: нельзя ли эту строчку записать только один раз, в конце скрипта, а цифру представить каким-нибудь хитрым образом, чтобы она прямо при записи менялась в зависимости от обстоятельств. Ответ: на то и существуют переменные.

Объявим в начале нашего скрипта с помощью волшебного слова var переменную i :

var i; (каждое «действие» в сценарии JavaScript должно заканчиваться знаком; - точка с запятой).

Самую последнюю строчку, печатающую результат в файл, сделаем такой:

Document.write("");

Знак + в данном случае соединяет в единую строку несколько разных фрагментов текста. Если бы мы, например, написали строку «2 + 2», JavaScript заставил бы браузер вывести на экран «4» (а не «22»). Но мы записываем "js" + 2 + ".css", и получим в итоге "js2.css". Обратите внимание на то, как расставлены кавычки. Все текстовые строки в JavaScript должны быть заключены в кавычки - всё равно, в какие: двойные или одинарные. Мы выбрали двойные. Но в результирующей строке языка HTML тоже нужны кавычки, и если мы попытаемся написать "document.write("

Рекомендуем почитать

Наверх