Как структурировать HTML-формы. Фундаментальная уязвимость HTML при встраивании скриптов

Чтобы описать суть проблемы, мне нужно рассказать, как вообще устроен HTML. Вы наверняка в общих чертах представляли себе, но я все равно коротко пробегусь по основным моментам, которые понадобятся для понимания. Если кому-то не терпится, сразу переходите к сути .


HTML - это язык гипертекстовой разметки. Чтобы говорить на этом языке, нужно соблюдать его формат, иначе тот, кто читает написанное, не сможет вас понять. Например, в HTML у тегов есть атрибуты:



Тут - это имя атрибута, а - это его значение. В статье я буду использовать квадратные скобки вокруг кода, чтобы было понятно, где он начинается и заканчивается. После имени стои́т знак равенства, а после него - значение, заключенное в кавычки. Значение атрибута начинается сразу после первого символа кавычки и заканчивается сразу перед следующим символом кавычки, где бы он не находился. Это значит, что если вместо вы запишете , то значение атрибута name будет , а еще у вашего элемента будет три других атрибута с именами: [рога] , [и] и [копыта"."] , но без значений.


Если это не то, чего вы ожидали, вам нужно как-то изменить значение атрибута, чтобы в нем не встречалась кавычка. Самое простое, что можно придумать - просто вырезать кавычки.


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


Чтобы вы могли указать в качестве значения любую строку, формат языка HTML предлагает возможность экранировать значения атрибутов. Вместо кавычки в строке значения вы можете записать последовательность символов ["] и парсер поймет, что в этом месте в исходной строке, которую вы хотите использовать в качестве значения атрибута, была кавычка. Такие последовательности называются HTML entities.


При этом, если в вашей исходной строке действительно была последовательность символов ["] , у вас все еще есть возможность записать её так, чтобы парсер не превратил её в кавычку - для этого надо заменить знак [&] на последовательность символов [&] , то есть вместо ["] вам нужно будет записать в сыром тексте ["] .


Получается, что преобразование из исходной строки в ту, которую мы запишем между двумя символами кавычек, является однозначным и обратимым . Благодаря этим преобразованиям можно записать и прочитать любую строку в качестве атрибута HTML-тега, не вдаваясь в суть её содержимого. Вы просто соблюдаете формат, и все работает.


Собственно, так работает большинство форматов, с которыми мы сталкиваемся: есть синтаксис, есть способ экранирования контента от этого синтаксиса и способ экранирования символов экранирования, если вдруг такая последовательность встречается в исходной строке. Большинство, но не…

Тег

Тег служит для встраивания в HTML фрагментов, написанных на других языках. На сегодняшний день в 99% случаев это Javascript. Скрипт начинается сразу после открывающего тега и заканчивается сразу перед закрывающим тегом . Парсер HTML внутрь тега не заглядывает, для него это просто какой-то текст, который он потом отдает в парсер Javascript.


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


var s = "surprise!alert("whoops!")";

Что тут должно происходить: переменной s должна присваиваться безобидная строка.


Что тут происходит на самом деле: Скрипт, в котором объявляется переменная s на самом деле заканчивается так: , что приводит к ошибке синтаксиса. Весь текст после него интерпретируется как чистый HTML и в него может быть внедрена любая разметка. В данном случае открывается новый тег и выполняется зловредный код.


Мы получили тот же эффект, как когда в значении атрибута присутствует кавычка. Но в отличие от значений атрибута, для тега нет никакого способа экранировать исходный контент. HTML entities внутри тега не работают, они будут переданы в парсер Javascript без изменений, то есть либо приведут к ошибке, либо изменят его смысл. Стандарт HTML прямо говорит, что в содержимом тега не может быть последовательности символов ни в каком виде. А стандарт Javascript не запрещает такой последовательности быть где угодно в строковых литералах.


Получается парадоксальная ситуация: после встраивания валидного Javascript в валидный документ HTML абсолютно валидными средствами мы можем получить невалидный результат .


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

Как эксплуатируется уязвимость

Конечно, когда вы просто пишете какой-то код, трудно представить, что вы напишете в строке и не заметите проблем. Как минимум, подсветка синтаксиса даст вам знать, что тег закрылся раньше времени, как максимум, написанный вами код не запустится и вы будете долго искать, что произошло. Но это не является основной проблемой с этой уязвимостью. Проблема возникает там, где вы вставляете какой-то контент в Javascript, когда генерируете HTML. Вот частый кусок кода приложений на реакте с серверным рендерингом:


window.__INITIAL_STATE__ = ;

В initialState может появиться в любом месте, где данные поступают от пользователя или из других систем. JSON.stringify не будет менять такие строки при сериализации, потому что они полностью соответствуют формату JSON и Javascript, поэтому они просто попадут на страницу и позволят злоумышленнику выполнить произвольный Javascript в браузере пользователя.


Другой пример:


analytics.identify("", ...);

Тут в строки с соответствующим экранированием записываются id пользователя и referer , который пришел на сервер. И, если в user.id вряд ли будет что-то кроме цифр, то в referer злоумышленник может запихнуть что угодно.


Но на закрывающем теге приколы не заканчиваются. Опасность представляет и открывающий тег , если перед ним в любом месте есть символы [ Нет
Да Нет

В этом примере мы:

  • Внутри первой формы:
    • Разместили две радиокнопки ( ) для выбора одного из ограниченного числа вариантов. Еще раз обратите внимание, что для радиокнопок внутри одной формы необходимо указывать одинаковое имя , значения мы указали разные. Для первой checked , который указывает, что элемент должен быть предварительно выбран при загрузке страницы (в данном случае радиокнопка со значением yes ). Кроме того, мы указали для радиокнопок глобальные атрибуты , которые определяют уникальный идентификатор для элемента.
    • Разместили два элемента , которые определяют текстовые метки для наших текстовых полей. Обратите внимание, что мы использовали атрибут for , чтобы определить к какому элементу формы относится текущая метка. Значение атрибута for соответствует значению глобального атрибута необходимой нам радиокнопки.
  • Внутри второй формы:
    • Разместили две радиокнопки ( ) для выбора одного из ограниченного числа вариантов. Для второй радиокнопки мы указали атрибут

При встраивании JavaScript в документ HTML, где нужно разместить теги и включить JavaScript? Кажется, я помню, что вы не должны размещать их в разделе , но размещение в начале раздела тоже плохо, так как JavaScript должен быть проанализирован до того, как страница будет полностью отображена (или что-то типа того). Похоже, что конец раздела остается логическим местом для тегов .

Итак, где подходящее место для размещения тегов ?

23 ответов

Вот что происходит, когда браузер загружает веб-сайт с на нем:

  • Получить страницу HTML (например, index.html)
  • Начните синтаксический разбор HTML
  • Парсер встречает ссылающийся на внешний файл сценария.
  • Браузер запрашивает файл сценария. Между тем, синтаксический анализатор блокирует и останавливает анализ другого HTML на вашей странице.
  • Через некоторое время скрипт загружается и затем выполняется.
  • Парсер продолжает анализировать остальную часть документа HTML.
  • Шаг №4 вызывает плохой пользовательский интерфейс. Ваш сайт в основном останавливает загрузку, пока вы не загрузите все сценарии. Если есть одна вещь, которую пользователи ненавидят, она ждет загрузки веб-сайта.

    Почему это происходит?

    Любой скрипт может вставить свой собственный HTML через document.write() или другие манипуляции с DOM. Это означает, что синтаксический анализатор должен дождаться загрузки и выполнения сценария, прежде чем он сможет безопасно проанализировать остальную часть документа. В конце концов, скрипт мог бы вставить свой собственный HTML в документ.

    Однако большинство разработчиков JavaScript больше не манипулируют DOM во время загрузки документа. Вместо этого они ждут, пока документ не будет загружен до его изменения. Например:

    My Page Welcome back, user

    // my-script.js document.addEventListener("DOMContentLoaded", function() { // this function runs when the DOM is ready, i.e. when the document has been parsed document.getElementById("user-greeting").textContent = "Welcome back, Bart"; });

    Поскольку ваш браузер не знает, что my-script.js не будет изменять документ до тех пор, пока он не будет загружен и не запущен, анализатор прекратит разбор.

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

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

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

    Современный подход

    Сегодня браузеры поддерживают async и defer атрибуты скриптов. Эти атрибуты говорят браузеру безопасно продолжать синтаксический анализ во время загрузки скриптов.

    асинхронной

    Сценарии с атрибутом async выполняются асинхронно. Это означает, что скрипт выполняется, как только он загружается, не блокируя браузер тем временем.
    Это означает, что скрипт 2 можно загрузить и выполнить перед сценарием 1.

    Вывод

    Текущее состояние дел состоит в том, чтобы поместить скрипты в и использовать атрибуты async или defer . Это позволяет загружать скрипты как можно скорее, не блокируя ваш браузер.

    Хорошо, что ваш сайт должен по-прежнему правильно загружать 6% браузеров, которые не поддерживают эти атрибуты, в то же время ускоряя другие 94%.

    Перед тегом закрывающего тела, как указано на

    Поместите скрипты в нижней части

    Проблема, вызванная скриптами, заключается в том, что они блокируют параллельные загрузки. Спецификация HTTP/1.1 предполагает, что браузеры загружают не более двух компонентов параллельно по имени узла. Если вы обслуживаете свои изображения из нескольких имен хостов, вы можете получить более двух загрузок, которые будут происходить параллельно. Однако при загрузке script браузер не запускает никаких других загрузок даже на разных именах хостов.

    Неблокирующие теги script можно разместить где угодно:

    • async script будет выполняться асинхронно, как только он будет доступен
    • defer script выполняется, когда документ завершил синтаксический анализ
    • async defer script возвращается к отложенному поведению, если async не поддерживается

    Такие скрипты будут выполняться асинхронно/после завершения документа, что означает, что вы не можете сделать это:

    jQuery(something);

    Сказав это, асинхронные скрипты предлагают следующие преимущества:

    :
    Браузер может загружать таблицы стилей, изображений и другие сценарии параллельно, не дожидаясь загрузки и выполнения script.
  • Независимость от исходного порядка :
    Вы можете поместить скрипты внутри головы или тела, не беспокоясь о блокировке (полезно, если вы используете CMS). Порядок выполнения все еще имеет значение.
  • Можно обойти проблемы порядка выполнения, используя внешние скрипты, поддерживающие обратные вызовы. Многие сторонние API-интерфейсы JavaScript теперь поддерживают неблокирующее выполнение. Ниже приведен пример аффинной загрузки API Карт Google .

    Стандартный совет, продвигаемый Yahoo! Команда Exceptional Performance - разместить теги в конце тела документа, чтобы они не блокировали отображение страницы.

    Но есть несколько новых подходов, которые предлагают более высокую производительность, как описано в этом ответе , о времени загрузки файла JavaScript Google Analytics:

    Если вы используете JQuery, тогда поместите javascript везде, где вы найдете его лучше, и используйте $(document).ready() , чтобы обеспечить правильную загрузку вещей перед выполнением каких-либо функций.

    На стороне примечания: Мне нравятся все теги script в разделе , поскольку это кажется самым чистым местом.

    XHTML не будет проверять, есть ли script где-либо, кроме элемента head. , он может быть везде.

    Вы можете отложить выполнение с помощью чего-то вроде jQuery, поэтому не имеет значения, где он размещен (за исключением небольшого удара производительности при разборе).

    Тег

    script должен использоваться всегда перед телом или Нижним в HTML файле.

    вы можете увидеть содержимое страницы перед загрузкой файла js .

    проверьте это, если требуется: http://stevesouders.com/hpws/rule-js-bottom.php

    Размещение сценариев во внешних файлах имеет ряд преимуществ: он разделяет HTML и код, облегчает чтение и поддержку HTML и JavaScript. Кэшированные файлы JavaScript могут ускорить загрузку страниц. Получить страницу HTML (например, index.html). Начать анализ HTML. тег, ссылающийся на внешний файл скрипта. Браузер запрашивает файл скрипта. Тем временем парсер блокирует и прекращает анализ другого HTML-кода на вашей странице. Через некоторое время скрипт загружается и впоследствии выполняется. Парсер продолжает анализ остальной части HTML-документа.

    Обычный (и общепринятый) ответ "внизу", потому что тогда весь DOM будет загружен, прежде чем что-либо начнет выполнение.

    По разным причинам существуют инакомыслящие, начиная с доступной практики, чтобы преднамеренно начать выполнение с события onload на странице.

    В зависимости от script и его использования наилучшим (с точки зрения загрузки страницы и времени рендеринга) может быть не использовать обычный -tag per se, а динамически запускать загрузку script асинхронно.

    Есть несколько разных методов, но наиболее прямолинейным является использование document.createElement("script") при срабатывании события window.onload. Затем script загружается первым, когда сама страница была отображена, что не влияет на время, когда пользователю приходится ждать появления страницы.

    Это, естественно, требует, чтобы сам script не нужен для рендеринга страницы.

    Зависит, если вы загружаете script, который необходим для стилизации вашей страницы/использования действий на вашей странице (например, одним нажатием кнопки), тогда лучше разместить ее сверху. Если ваш стиль составляет 100% CSS, и у вас есть все варианты возврата для действий кнопки, вы можете поместить его внизу.

    Или лучше всего (если это не проблема), вы можете сделать модульную загрузочную коробку, поместить свой javascript внизу своей страницы и заставить ее исчезнуть при загрузке последней строки вашего script. Таким образом, вы можете избежать использования пользователями действий на вашей странице перед загрузкой скриптов. А также избегайте неправильного стиля.

    Script блокирует загрузку DOM до ее загрузки и выполнения.

    Если вы размещаете скрипты в конце , все DOM имеют возможность загружать и отображать (страница будет "отображаться" быстрее). будет иметь доступ ко всем этим элементам DOM.

    В другой руке, помещающей его после start или above, будет выполняться script (там, где еще нет элементов DOM).

    Вы включаете jQuery, что означает, что вы можете разместить его там, где хотите, и . ready()

    Прежде всего, чтобы представить мою диаграмму и понять объяснение, вы должны знать этот цвет, что относится

    вы должны поместить их в конец тела перед закрытием тега (body), это поможет вам игнорировать любую ошибку

    но вы можете поместить их перед тегом закрытия головы,

    но это приводит к очень плохому пользовательскому опыту, поскольку браузер на самом деле не делает ничего полезного во время загрузки файла скрипта. но что происходит, когда браузер встречает вышеуказанную строку в вашей разметке, это то, что происходит.

  • Пауза в разборе документа.
  • Сделайте запрос на получение файла.
  • Выполните скрипт после его загрузки.
  • Возобновите разбор документа.
  • поэтому, когда обнаруживается какая-либо ошибка, этот эффект присутствует в нашем контенте, но я хочу поместить свой скрипт в верхнюю часть моей разметки, и я не знаю, есть ли ошибка или нет, у вас есть два атрибута, я думаю, это поможет вам чтобы скачать разметку, а не с помощью скрипта

    1. Первый атрибут

    Асинхронизация. Когда вы добавляете атрибут асинхронности в тег сценария, произойдет следующее.

  • Делайте параллельные запросы для получения файлов.
  • Выполните отдельные сценарии в момент загрузки файлов.
  • Самое замечательное в этом потоке заключается в том, что скрипты могут загружаться параллельно во время анализа документа. Но есть предостережение в отношении этого и третьего пункта - скрипт будет выполнен в тот момент, когда он будет загружен. Это может быть не проблема, если скрипт полностью автономен. Однако во многих ситуациях сценарии могут зависеть от других сценариев, которые выполнили некоторую инициализацию, прежде чем они смогут выполняться. например, плагины jquery требуют, чтобы переменная jquery уже существовала на странице.

    ВНИМАНИЕ: Сценарии, которые вы программно вставляете в DOM, являются асинхронными по умолчанию, если вы явно не установили для их атрибута async значение false во время вставки.

  • Второй атрибут
  • Defer: Defer очень похож на асинхронный с одним существенным отличием. Вот что происходит, когда браузер встречает скрипт с атрибутом defer.

  • Делайте параллельные запросы для извлечения отдельных файлов.
  • Продолжайте анализ документа, как если бы он никогда не прерывался.
  • Завершите анализ документа, даже если загружены файлы сценариев.
  • Выполните каждый сценарий в том порядке, в котором они встречались в документе.
  • Как вы можете сказать, defer - это почти то, что вы хотите сделать в своих файлах. Тем не менее, из-за ограниченной поддержки браузера, это не жизнеспособный вариант на момент написания. ВНИМАНИЕ: Атрибуты async и defer игнорируются для сценариев, не имеющих атрибута src.

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

    • Если скрипт является модульным и не использует скрипты, используйте
      асинхронный.
    • Если скрипт использует другой сценарий или использует его, используйте defer.
    • Если скрипт небольшой и на него опирается асинхронный скрипт, используйте встроенный скрипт без атрибутов, размещенных над асинхронными скриптами.

    Современный подход в 2019 году - использование скриптов типа модуля ES6 .

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

    Различия между скриптом и модулем описаны здесь:

    Выполнение модуля по сравнению со сценарием описано здесь:

    Поддержка показана здесь.

    Comments Comment by Toldry If you"re going to look for someone who has Inscription as his profession, you say "Looking for a scribe", not "Looking for a inscriptor" Comment by Nightphoenix16 I need an addon that will automatically correct people who get that wrong in trade chat. Countless times I"ve had to freaking remind people, SCRIBE! Comment by Lobstah LF inscriptionist Comment by theakismaniac scribe
    n. - a person who serves as a professional copyist, a public clerk, writer or author
    v. - to write down

    inscriptor... is not a real word
    inscriber... is not a real word

    inscribe is a word and means close to the same thing as scribe, as well as the -ed (past) and -ing (present)... but unfortunately, that insciptor in trade chat you are looking for doesn"t exist

    just good thing its not the same with other professions, like tailoring means "the art of cutting," and so many terms for specific kinds, like imagine asking for a shoe maker in trade and someone going "don"t you mean a cobbler?" ...at least you don"t run the risk of getting your mouth sewn shut lol

    Comment by M4V4R1CK grammar nazis.. >.>

    this is a game... not a school...

    Comment by djtacoman Inscription patterns are called techniques when you find one being sold by a vendor or dropped by a mob. Comment by chuckmoney It"s also worth noting that Inscription is the only profession that provides an additional Hearthstone in the form of Scroll of Recall, similar to how Shammys have their own hearth spell. This opens up some unique possibilities for some crafty money making.

    A Shaman with Inscription can go home literally every 5 minutes, so if there is a vendor item near your capital (cats in Goldshire, as an example), you can ride out, buy some, then hearth/recall/scroll back to the capital and stick it on the AH. If you can find limited supply items within 3 minutes of an AH location, this can cut your transit time in half, constantly saving you the trip back.

    A Mage with at least 1 Teleport skill can do the same thing but even better. Set your hearth somewhere like Gadgetzan or Everlook and buy limited stock recipes, then teleport back home to AH them. Your cooldown time will go to 10 minutes instead of the 5 above, but most of the recipes won"t respawn in 5 minutes anyway. Choose areas which are incredibly difficult to get to - places without a flight point work best - and go to town flipping items.

    Of course, you could just as easily have an alt camp the point and mail it to yourself, but...

    Edit: Not to sound like I"m owed some sort of explanation, but does someone mind telling me why you modded this down? I can understand if you don"t like people doing this (nobody likes higher AH prices) but unless you are going to try to tell me something in my post is false, I humbly request that you unmod it back to neutral.

    Comment by mahgo Inscriptionator. Comment by badley Patch 4.0.1 is live.... and most glyphs have been reset! NOW is the best time to be a scribe. Glyphs are going for around 100-150g easy on my server because they"re just that much in-demand Comment by dragonknight2300 at the moment the most awesome thing i would like to see for a scribe is the ability to filter by glyph type. I"m constantly asked, "hey what minor glyphs can you make me?" or similar and this would make answering such requests much easier. Adding it to the Auction house would be awesome too but less necessary with the glyph list now available on each character. Comment by saco Are there gonna be new glyphs in Cata? Was hoping to see what some new glyphs might be but see no new ones in Cata. Overeall highly disappointed in the whole glyph system...think it"s bout utter crap.

    Why? Because every class+spec is pigeon holed into the same glyphs...there is no choices or variations for the most part. There is some but very limited and most are about utter crap.

    I mean srly...if thats the case why not just give the "glyph benefits" as part of the talent tree specialization bonus. I wanted glyphs to provide uniqueness or flavor of a limited form of custimization. If this is the best Blizz can do then obviously they just wasted money n resources on the manpower developing this gyph system.

    Comment by Catriona Are we still stuck using Books of Glyph Mastery to learn glyphs? Comment by Hakunamatata

    By chuckmoney on 09/04/2010 (Patch 3.3.5)
    It"s also worth noting that Inscription is the only profession that provides an additional Hearthstone in the form of Scroll of Recall, similar to how Shammys have their own hearth spell. This opens up some unique possibilities for some crafty money making.

    This is no longer true as of 4.0.3. Archaeologists now have which is an equivalent of a Hearthstone.

    Comment by Alatoth

    I was wondering this as well. ARL is telling me that I have 25 glyphs to learn and the only way to get them is through a book that drops in instances that no one runs anymore.
    Does anyone know if Cataclysm has given us a alternate way to learn these Glyphs?

    happy discovery:)

    Comment by peoriapeg These do not teach glyphs - they give buffs. Comment by millerr33 Does anybody know of an addon that you can use to see what is still undiscovered? Comment by Brugge Not true, Innkeepers Daughter shares a cooldown with your Hearthstone, so it is more of a cosmetic replacement. Comment by bonkyeknod the recall scroll is unpredictable after lvl 40 tried for swamp of sorrow the other day got sent to westfall i wouldnt recommend it and i perfer to be referred to as the inkman Comment by bonkyeknod recall scrolls are unpredictable after lvl 40 and i like to be called an inkman Comment by Kobodoshi According to http://www.merriam-webster.com/dictionary/inscriber , inscriber is the appropriate term. While a scribe can produce many documents (i.e. manuscripts), the more precise term for someone who produces an inscription is an inscriber. Comment by AcantiTheGreat Trust me, being a Death Knight, profesions are horrid. Untill I got to 75, I had no reason for them. Learning inscription is deffinately worth your while. When you start making glpyhs, mass production is the key. If you can take over the auction house (Very easy), you will see your banking character move up very quickly. This is also a very time consuming prof.
    Check other proffessions for my suggestions on who should have which. Comment by Zulummar No it doesn"t, at least not if you"re 85. It bestows a random buff on you, and in fact the item isn"t even usable if you"re level 85. Comment by Nephthis Hate to bust your bubble buddy. But Inscriber is a word. Deal with it.
    It"s a noun, so it is not "either or", it"s "both".
    Nice try though bud. Comment by Nephthis

    Scribe or Inscriber

    Edits: Curiously enough one of the next words in these very, very unwieldy collections of paper bound in a curious manner, called "Dictionary" in the land where I come from we use these collections of paper bound in curious manners to "define" what we call in english "words". Contrary to popular belief, there are a great many of them (words that is. Word.)

    Inscribe" (which includes the word "Inscriber" in noun form) Is none other than the word "Inscription"! Wow! I wish I could smack you just to emphasise the fact your not only an idiot, but you didn"t even check and sloth is just not only ridiculous but disgusting.

    I"m the light, you turn to stone, not get stoned. .

    Comment by Nephthis Hate to bust your bubble buddy...

    However, Inscriber is a word. I bet in hindsight you feel like an idiot, rightly so. Deal with it.

    On to the word: Inscriber, it is a noun, so it is not just "scibe", it"s "both". (In regards, to scribe or inscriber.)

    Nice try though bud. You really should double check your information because... Your arrogance is commendable. Your ignorance makes you ridiculous.

    Scribe or Inscriber , and in frivolous moments... Inscriptioningist LFW.

    I digress, In this thing called "Dictionary", the very next word after "Inscribe
    In Trade you are what we call "TROLL", savy?

    Comment by Nephthis Hate to bust your bubble buddy...

    However, Inscriber is a word. I bet in hindsight you feel like an idiot, rightly so. Deal with it.

    On to the word: Inscriber, it is a noun, so it is not just "scibe", it"s "both". (In regards, to scribe or inscriber.)

    Nice try though bud. You really should double check your information because... Your arrogance is commendable. Your ignorance makes you ridiculous.

    Scribe or Inscriber , and in frivolous moments... Inscriptioningist LFW.

    Edit/Afterthoughts (for those capable of understanding): Curiously enough one of the next words in these very, very unwieldy collections of paper bound in a curious manner, called "Dictionary" in the land where I come from we use these collections of paper bound in curious manners to "define" what we call in english "words". Contrary to popular belief, there are a great many of them (words that is. Word.)

    I digress, In this thing called "Dictionary", the very next word after "Inscribe " (which coincidentally includes the word "Inscriber" in noun form) Is none other than the word " "! Wow! I wish I could smack you just to emphasise the fact your not only an idiot, but you didn"t even check!
    In Trade you are what we call "TROLL", savy?

    I"m the light, you turn to stone, not get stoned...

    Post Script: The british variant of "Emphasise" is intended. Just because it is, and it can be such as it is to be as an Inscriber.

    Comment by Nephthis Druid Inscribers also make excellent farmers. It must be their oneness with nature, and their ability to read that makes them natural cash cows... (Some disparaging tauren humor for the alliance players.) Comment by Nephthis In 4.0.1 you could. If you paid attention to your user interface. Comment by Elevate

    Inscription - hands down. It"s not even close.

    The trick is to become one of those people who undercut others quickly and efficiently. Once you have all of your milling/crafting/posting add-ons set up, inscription makes money like crazy. Glyphs are where it"s at.

    (BTW - you"ll know that you"re efficient at the undercutting game when you can determine which glyphs you"re being undercut on, and then cancel and repost up to 200 glyphs in under 10 minutes).

    There are huge initial investments that you"ll have to make, though. Forget trying to make money with the glyphs that you learn from the trainer while you"re levelling the profession. You"ll need to buy 54 of these . Right now, on my server, they go for 250g (I cry when I think that I used to sell them for 15g during WoLK). You also have to make sure to do your Northrend inscription research every day for a couple months to build up your catalogue of glyphs that you can make.

    For me, I make around 5-6k a day selling glyphs. I buy all of my herbs on the AH. I usually check for undercuts and then cancel and repost around 3x per day. So, in total, it takes me around an hour a day to make the 5-6k - around 30 minutes to mill herbs, make ink, and make glyphs, and then 30 minutes to post them and then do my 3 cancel/re-posts per day.

    Comment by FritoDan Now and again discussions crop up on this site (as well as in-game) about what exactly is the correct way to refer to someone preforming the inscription, similar to how "Tailoring" is done by "tailors." So I figured I"d post the answer here on the main Inscription page for anyone curious.

    For most people it comes down to arguing "scribe" versus "inscriptionist." However both of these are incorrect: As far as I can tell, "inscriptionist" is not a true word, and strictly speaking it"s incorrect to state that inscription is performed by scribes.

    A basic explanation is that "to scribe" something generally implies an act involving a larger body of text, like authoring a work, copying a manuscript by hand, or something along those lines. An alternative usage denotes using a sharp instrument to mark lines in something like wood as guides for it to be cut along. For either of these definitions, the person performing the act is a scribe .

    In scribing, on the other hand, has more to do with fancy markings or engravings, and generally involves much shorter bits of writing. The person doing the inscribing is called an inscriber .

    -->> TLDR: Inscription is done by inscribers, not scribes. Scribes do other things.

    Finally, in case there"s any other linguistics buffs out there reading this, it"s also possible that the word "scribe" derives from "inscribe" through aphesis. But that"s not really relevant here, since their definitions today are distinct from each other, as stated above.

    Edit: The game uses "scribe," and I"m not trying to try to convince anyone not to use that term. I just wanted to impart some insight into this discussion.

    Comment by Asilya

    Epigraphy (from the Greek: ἐπιγραφή epi-graphē, literally "on-writing", "inscription") is the study of inscriptions or epigraphs as writing; that is, the science of identifying the graphemes and of classifying their use as to cultural context and date, elucidating their meaning and assessing what conclusions can be deduced concerning the writing and the writers. Specifically excluded from epigraphy is the historical significance of an epigraph as a document or the artistic value of a literary composition.

    A person utilizing the methods of epigraphy is called an epigrapher or epigraphist. For example, the Behistun inscription is an official document of the Achaemenid Empire engraved on native rock at a location in Iran. Epigraphists are responsible for reconstructing, translating and dating the trilingual inscription and finding any relevant circumstances. It is the work of historians, however, to determine and interpret the events recorded by the inscription as document. Often epigraphy and history are competences practiced by the same person.

    This is the result of searching for inscription on wikipedia.
    Even though i feel scribe is generally accepted, is the right word actually epigrapher/epigraphist?

    Comment by Minikila this is a macro yo can us for milling
    #show (herb name)
    /cast Milling
    /use (herb name) Comment by Anaberry Don"t discard your out leveled scrolls of recall! I even make more of them.

    What is it you are doing but making batch after batch of pigment and ink standing in the middle of a market heyday? Not me, sure I run hundreds of glyphs but I am doing my milling in exotic locations thanks to simple scroll of recall. I get my herbs ready, grab an outdated scroll, and go *poof. I am standing in some zone totally unexpected. Then I fly to some overlook or not, I mill away from everyone. I love the adventure and hearth home. No other profession has either need or ability. Plus I am not spamming the combat deeds with enticing money making suggestions.

    Comment by Eighjan All those in favour of the (planned) v4.2 PvP trinkets being released as BoE, rather than BoP, say "AYE"...? Comment by cinb40 I hope someone reads this and it doesn"t get marked down before I get some kind of answer. I have inscription maxxed out at 525, a month or so ago I stopped with my minor inscription research because I wasn"t learning any new glyphs and was told by a GM that it was because I"d learned all the minors. Now the same thing is happening with the Northrend Inscription research. I get no new glyphs just a scroll

    I"ve tried the Adventurer"s Journal and it pops up a comment on screen that I am "too wise and powerful"..... the Book of Glyph mastery also doesn"t teach me any new ones. I know I don"t have them all since I had to go BUY a glyph the other day when I respecced my mage. Any comments?

    Comment by Zulecockinas Since we write things on scrolls, i kinda want the ability to make recipes for other professions. Think about it, why not? Isn"t that what scribes do? Comment by WoWHackingTools Valor Cap Increaser

    The Valor Cap Increaser edits the amount of valor points you can acquire by exploiting a simple Blizzard bug.

    Works on 4.2.0 (14480) (Current)

    Youtube:
    youtube.com/watch?v=ZEmApwl-fLk

    Download:
    mediafire.com/download.php?44e6vwdppzdv6sw

    Comment by Hanz0 what many people that have inscription forget is that you can make scrolls !

    They are as powerfull as 1/3 of any flask and are an actual delight when you`re doing heroics. The best thing about them is that you can send them to your alts or cast them on other players, unlike alchemy where you can use the 1/3 flasks only for yourself !

    Comment by Kleopatria

    Death Knight
    Glyph of Frost Strike
    Glyph of Anti-Magic Shell
    Glyph of Blood Tap
    Glyph of DRW
    Glyph of DC
    Glyph of Dark Succor
    Glyph of Death Coil
    Glyph of Death and Decay
    Glyph of HS
    Glyph of Horn of Winter
    Glyph of Howling Blast
    Glyph of Hungering Cold
    Glyph of Icy Touch
    Glyph of Obliterate
    Glyph of Path of Frost
    Glyph of Pestilence
    Glyph of Raise Dead
    Glyph of Rune Strike
    Glyph of Rune Tap
    Glyph of Scourge Strike
    Glyph of VB

    Druid
    Glyph of Berserk
    Glyph of Dash
    Glyph of Faerie Fire
    Glyph of Feral Charge
    Glyph of Ferocious Bite
    Glyph of Focus
    Glyph of Growl
    Glyph of Healing touch
    Glyph of Insect Swarm
    Glyph of Innervate
    Glyph of Lifebloom
    Glyph of Mangle
    Glyph of Moonfire
    Glyph of Nourish
    Glyph of Rebirth
    Glyph of Rejuvenation
    Glyph of Rip
    Glyph of Savage Roar
    Glyph of Shred
    Glyph of Starfall
    Glyph of Swiftmend
    Glyph of Tiger"s Fury
    Glyph of the Wild
    Glyph of Thorns
    Glyph of Treant
    Glyph of Typhoon
    Glyph of Unburdened Rebirth
    Glyph of Wild Growth
    Glyph of Wrath

    Comment by Kleopatria Glyphs required by each class at end-game - may make these glyphs more profitable to create

    Mage
    Glyph of Arcane Blast
    Glyph of Arcane Brilliance
    Glyph of Arcane Missiles
    Glyph of Arcane Power
    Glyph of Blink
    Glyph of Conjuring
    Glyph of Deep Freeze
    Glyph of Evocation
    Glyph of Fireball
    Glyph of Frostbolt
    Glyph of Frostfire
    Glyph of Ice Lance
    Glyph of Living Bomb
    Glyph of Mage Armour
    Glyph of Mirror Image
    Glyph of Molten Armor
    Glyph of Polymorph
    Glyph of Pyroblast

    Hunter
    Glyph of Arcane Shot
    Glyph of Bestial Wrath
    Glyph of Chimera Shot
    Glyph of Disengage
    Glyph of Feign Death
    Glyph of Immolation Trap
    Glyph of Kill Command
    Glyph of Kill Shot
    Glyph of Mending
    Glyph of Misdirection
    Glyph of Rapid Fire
    Glyph of Raptor Strike
    Glyph of Revive Pet
    Glyph of Snake Trap
    Glyph of Steady Shot
    Glyph of Silencing Shot
    Glyph of Trap Launcher

    More classes to follow - hope this helps in deciding which glyphs to make when levelling
    Kleopatria - Frostmourne Alliance

    Comment by DeeHants Don"t forget to pick up your Virtuoso Inking Set from your friendly neighbourhood inscription suppler! Comment by Gilmamesh Does anyone know if you can collect all the glyphs learned through discovery? Or is there a cut-off for learning the lower level glyphs? If so, is the cut-off tied to character level or inscription level?

    I noticed that my character stopped learning the lower-level glyphs and starting learning higher-level glyphs even though I am using Minor Inscription Research. I was hoping to eventually learn them all.

    Comment by blunkszilla I took up this profession thinking that I could make just enough money to get by (skills, repairs, etc.) I later realized this is very profitable (depending on your realm) and fun. I used my dk to supply mats for my druid. later milled them and turned them into inks (even got some sold for 100g a stack). Its very handy when you need a little pocket cash =) Comment by lifeslowlydies If you pick up this profession at the moment you still need the Book of Glyph Mastery to learn many glyphs. The Book of Glyph Mastery can still only be obtained in Northrend as well, which is why if you check the Auction House on your server the books may be expensive. Blizzard did not update these to drop in Cata Zones like they did for other professions. Inscription is one of the easier professions to level up to getting your shoulder achievement and it will save you grinding some reputation. I suggest you have a character with herbalism, for that is what makes it very easy. Comment by Chiad i highly recommend this profession if you need some money while getting your char to level 90 you can earn a lot of money just with the glyphs you get from the trainer even low level ones can be sold for a lot Comment by Stonessnake14 How come Wowhead has 472 glyphs and the armory has only 344? Does the armory not have all the discovered ones listed or does Wowhead still have some old ones included?

    Thanks in advance

    Comment by LdyKarghon I am at 600 and on the list of recipes it shows up to 610. How do I get to that level? My trainer has stopped giving me glyphs. Comment by realfix I tried to trade in some black fallow ink to no avail. As there is only one glyph that uses the stuff, It is now totally useless. Since all Cataclysm herbs yield ashen pigment and turns into blackfallow ink the whole Cataclysm areas are not defunct and useless. The stuff is trash and so is Cataclysm. They have rendered it irrelevant in the whole of the games as well. It is useless to even visit these areas because the armors are weaker and have less useable stats than the Panda gear. All the epic gear I starved to learn and collect recipes for are irrelevant. Thanks for wasting my life! Comment by Thrallscream Hey guys,

    Just a tip if you find yourself seemingly "stuck" between 550 and 560 like I did (even though it was my second toon to have maxed inscription) lol.

    It can serve as a quick way to look up:

    • Is a particular glyph trainable (if so, it won"t be listed, I only listed researched glyphs)
    • If it is a researched glyph it should tell you which type of research is needed to get it

    If you are tracking your own glyphs, feel free to make a copy of the spreadsheet. I protected all but the "Comments" sheet so that no one can completely screw it up.

    Since you no longer need Books of Glyph Mastery for any Northrend glyphs, I didn"t bother to break that out nor do I say what skill level each glyph requires to learn. Don"t forget that now you can learn Northrend glyphs from Scrolls of Wisdom, too.

    Hope it is helpful for others. If so leave a comment here, uprate this comment, or leave a comment in the sheet.

    Comment by jahf To help with looking up which glyphs are from what types of research, I made this This Google Spreadsheet .

    Updated on 2014-10-28 for WoD "Warbinder"s Ink" research

    • If a glyph is trainable (ie, from a trainer) it will NOT be listed
    • I use the sheet to track my progress on learning various glyphs
    • It will also show you which research type is required
    • "m"inor and "M"ajor types are noted

    (reminder: you now can learn Northrend glyphs from Scrolls of Wisdom ... and you no longer need Book of Glyph Mastery unless you want to pay to speed up your learning process)

    The sheet is open for all to read. Anyone can leave a comment on the last page. If you want to copy the page to your own to track your glyph learning progress, feel free.

    If useful please uprate here or feel free to leave a comment in the file.

    Comment by briansavka Updated for the number of glyphs available.

    A helpful script that tracks how many glyphs you have and the amount of days left until you have learned them all at 3 new glyphs a day.

    /run local name,type local f=0 for i=1,GetNumTradeSkills() do name, type, _, _, _, _= GetTradeSkillInfo(i) if (name and type ~= "header" and string.find(name,"Glyph")) then f=f+1 end end do print(f.."/406"); print(math.ceil((406-f)/3).." days left") end

    Make sure you have the inscription window open for this macro to work.

    Comment by Jovio I have only 405 glyphs in my spellbook (according to battle.net), but trainer can give me no more, as will none of the researches. Is there a way to tell which I lack, or do I have to compare list to list, and is there a way to get the one I lack if I find out which one it is? Anyone know if there is one removed in 5.2, making the sum only 405 despite the amount here in wowhead (which gives 406 when filtering on "Glyph").

    Edit: After fiddling woth wowhead and battle.net, I finally discovered that (Glyph of Supernova) was missing, and it seems it does not exist ingame; at least not according to my warlock"s glyph list.

    Comment by altayrr Approximate Materials Required for 1-600:

    You should need less, so don"t mill every herb, mill them only if you need more pigment.

    110 Alabaster Pigment giving herbs
    70 Dusky Pigment giving herbs
    170 Golden Pigment giving herbs
    170 Emerald Pigment giving herbs
    160 Violet Pigment giving herbs
    80 Silvery Pigment giving herbs
    160 Nether Pigment giving herbs
    400 Azure Pigment giving herbs
    140 Ashen Pigment giving herbs
    320 Shadow Pigment giving herbs

    Comment by Premonition You also need to be at least level 10 to start the Inscription Profession! At level 10 you can set and build your talents and use Glyphs. Comment by Bighappykitty Just a word of warning on the new changes to Herbalism in 5.3. You can now level it exclusively in Pandaria.

    HOWEVER, there is no system in place to level inscription or alchemy the same way. So, do not make the same mistake I did, blissfully ignoring collecting herbs as you level a toon. I had to go back and grind my way through all the old content to get mats for alchemy; one full day has me just now starting the WotLK herbs.

    tldr version: If you"re planning on leveling alchemy or inscription on the same toon DO NOT skip collecting herbs as you level a toon.

    Comment by Sam97 I think that creators should add more BoE mounts and companions for inscription profession . Comment by Theolol Just to break it down for all of you who suffer from being called "inscriptionists", "inscriptioners", "inscriptionizorers", etc:

    inscription (noun) => to inscribe (verb) => inscriber / scribe (nouns)

    Feel free to share, end the pain!

    Comment by lecanard2 can you inscribe your name in gear? Comment by Decrity Guys:
    WoD patch notes:

    "Automatically Learned Glyphs

    While leveling, characters unlock Glyph slots at several specific levels. However, in order to get glyphs, characters need to visit an Auction House (and potentially pay way more gold than an average character of that level has yet), or know a Scribe from which to request them. To solve this, we"ve made characters learn some Glyphs automatically as they level.
    All classes now learn some of their Major Glyphs as they level. Recipes for these Glyphs have been removed.

    At level 25, the following Glyphs are automatically learned by characters of the appropriate class:
    Entangling Roots, Fae Silence, Ferocious Bite, Maul, Omens, Cat Form, Liberation, Pathfinding, Frost Nova, Blink, Fortuitous Spheres, Rapid Rolling, Afterlife, Harsh Words, Flash of Light, Alabaster Shield, Dazing Shield, Avenging Wrath, Templar"s Verdict, Levitate, Holy Fire, Fade, Deadly Momentum, Stealth, Flame Shock, Thunder, Healing Storm, Healing Wave, Spiritwalker"s Grace, Siphon Life, Drain Life, Demon Training, Ember Tap, Long Charge, Victory Rush, Bloodthirst, Gag Order

    At level 50, the following Glyphs are automatically learned by characters of the appropriate class:
    Might of Ursoc, Nature"s Grasp, Rebirth, Rejuvenation, Savagery, Mending, Chimera Shot, Black Ice, Polymorph, Spinning Crane Kick, Denounce, Divine Storm, Word of Glory, Reflective Shield, Smite, Mind Blast, Recuperate, Totemic Recall, Fear, Executor
    At level 60, the following Glyphs are automatically learned by characters of the appropriate class:
    Dark Succor, Unholy Command, Death Grip

    At level 75, the following Glyphs are automatically learned by characters of the appropriate class:
    Death and Decay, Dash, Faerie Fire, Healing Touch, Master Shapeshifter, Misdirection, Slow, Frostfire Bolt, Water Elemental, Breath of Fire, Mana Tea, Fists of Fury, Light of Dawn, Final Wrath, Double Jeopardy, Penance, Renew, Dispersion, Ambush, Cheap Shot, Lightning Shield, Eternal Earth, Healthstone, Bull Rush, Enraged Speed, Shield Wall"

    Comment by Shebeast Your list is missing a glyph for discipline/holy Priests. It"s called Glyph of Purification. It"s listed under the priest glyph tab. The information is as follows:

    Glyph of Purification
    Discipline, Holy
    Major Glyph
    Purify now has a maximum of 2 charges, but its cooldown is increased by 4 sec.

    Comment by XinR It appears Wowhead is playing WoD aready because a good many glyphs are listed that aren"t available yet and the glyphs that are still in game are not on that list either.. Comment by lankybrit I think it"s awesome that the cards only require War Paints, which are made with some basic pigment, instead of having to use rare pigments like previous expansions. I think this will lead to a more vibrant card market with more Trinkets made. Can"t wait to get my Scribe leveled up/ Comment by Draewind In WoW professions we now buid items that can rival the raid drop items and are far better than the dungeon drop items. They start small and can be made bigger and bigger. They all are created with what is called a . We even craft items to take another roll at the on the gear. The random enchant includes 2 of the secondary stats (giving us a measurable chance or RNG). Items for the Back (cloak), neck, neck, finger(ring), weapon, and shield, have a greater number of possibilities than other armor items, because they can contain the secondary statistics of Bonus Armor and Spirit (fortunately they do not include the combination of both those statistics ;-).

    All of the items have a name in the form of " of the ". If you click on the link, it will take you to a chart with all the possible names and combinations. I wish I could add a picture here.

    Examples:
    "Steelforged Shield of the Guileful" would have Critical Strike and Bonus Armor as the
    "Truesteel Breastplate of the Harmonious" would have Mastery and Versatitility as the
    (I think I threw up a little bit there)

    Most Armor Items:
    As we see from this graph, the number of possible for most armor items will be 10. So, you have a 1 in 10 (1/10 or 10% ) possibility of getting just the mixture of statistics you want.

    Cloaks, Necks, Rings, Shields, Weapons:
    These items have an additional 2 statisctics added to the normal 4. The added statistics, as mentioned earlier, are Bonus Armor and Spirit (Tank and Healer statistics, respectively). Fortunately there is no combination of both Bonus Armor and Spirit (ever here of teats on a boar hog?)

    Only weapon types intended for a healing class will have the possibility of Spirit, and only weapon types intended for a tanking class will have Bonus Armor. Weapons intended for both, will have the same chances as all the jewelry, cloaks, and shields. So if it can be enchanted (by enchanting) or is a shield, it fits in this class of item.

    So your chances of getting the perfect necklace with just the right two secondary statistics is 1 in 20 (1/20 or 5% ). I am not certain whether Bonus Armor and Spirit have the same chance of being included. If they are given a single chance and then chosen between the two, then your chance for an item with perfect statistics not including Bonus Armor or Spirit would be 1 in 15 (1/15 or 6.67% ).

    I would list here all the values associated with the , however they vary depending on the slot and material. They also vary with the level of the individual wearing or looking at them.

    There you have it. All the possible names and combinations. All items of the same level contain the same amount of statistic, such as "54 Critical Strike" and I have not seen a crafted item with a double a statistic (only one statistic but twice the value).

    EDIT: None of content, just spelling and highlighting.

    Описание

    HTML тег используется для добавления JavaScript-кода непосредственно в HTML-документ.

    Есть два способа добавления JavaScript-кода с помощью элемента :

    • JavaScript-код можно расположить непосредственно внутри элемента .
    • Подключить внешний файл с JavaScript-кодом.

    Сценарий, расположенный непосредственно внутри элемента , называют . Сценарий, расположенный внутри внешнего файла, называют .

    Обратите внимание, что, при написании встроенного JavaScript-кода, использовать строку "" в своём коде нельзя, так как она будет интерпретироваться браузером как закрывающий тег. Чтобы решить эту проблему, экранируйте символ /: " ".

    Подключение внешнего файла выполняется с помощью атрибута src . Внешним файлам, содержащим JavaScript-код, дают расширение.js:

    Сам внешний файл должен содержать только JavaScript-код (без тегов и ).

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

    Элемент может располагаться в любом месте внутри элемента и/или и использоваться любое количество раз.

    Независимо от того, как JavaScript-код добавляется на страницу, элементы обрабатываются в том порядке, в котором они расположены в HTML-коде, при условии, что у них нет атрибутов defer и async . Код первого элемента должен быть полностью интерпретирован, чтобы можно было приступить ко второму элементу , второй элемент должен быть полностью обработан перед третьим, и т. д.

    Атрибуты async: Указывает, что нужно немедленно начать загрузку сценария с сервера и сразу же после его загрузки перейти к выполнению сценария (одновременно с загрузкой остального содержимого страницы). Если с атрибутом async определено несколько элементов , то первым начнёт выполняться тот сценарий, который раньше загрузится. Действителен только для внешних сценариев.

    Возможные значения логического атрибута async:

    Примечание: атрибут async не поддерживается в IE9 и более ранних версиях.

    Defer: Указывает, что сценарий будет загружен немедленно, но его выполнение можно безопасно отложить до тех пор, пока не будет загружено остальное содержимое страницы. Если с атрибутом defer определено несколько элементов , то сценарии будут выполняться в том порядке, в котором они расположены в HTML-коде, то есть первым выполнится тот сценарий, который расположен в коде раньше. Действителен только для внешних сценариев.

    Возможные значения логического атрибута defer: type: Идентифицирует скриптовый язык, используемый в коде встроенного или внешнего сценария. Поддерживаемые значения MIME-типа:

    • text/javascript
    • text/ecmascript
    • application/ecmascript
    • application/javascript
    • text/vbscript
    Если в качестве скриптового языка используется JavaScript, то атрибут type можно опустить (при отсутствии данного атрибута по умолчанию используется значение text/javascript). charset: Указывает кодировку символов, используемую во внешнем файле со сценарием. Атрибут charset используется только в том случае, если кодировка во внешнем файле со сценарием отличается от кодировки в html-документе. src: Указывает URL-адрес внешнего файла со сценарием. Стиль по умолчанию script { display: none; } Пример document.write("Hello World!");

    Результат данного примера в окне браузера.



    
    Top