Подстановки (entity) поддерживаются только браузером Netscape Navigator 4.0. Они встречаются на Web-страницах довольно редко. Тем не менее это достаточно мощный инструмент генерации HTML-страницы на стороне браузера. Подстановки имеют формат: &{код_программы}; и используются в качестве значений атрибутов HTML-контейнеров. В следующем примере поле ввода INPUT будет иметь, в качестве значения по умолчанию, адрес текущей страницы, а размер поля будет равным количеству символов в этом адресе.
<HTML> <HEAD> <SCRIPT> function l() { str = window.location.href; return(str.length); } </SCRIPT> </HEAD> <BODY> <FORM><INPUT TYPE=text SIZE="&{l()};" VALUE="&{window.location.href};"> </FORM> </BODY> </HTML>
В случае подстановки JavaScript-интерпретатор получает управление в момент разбора браузером (компонент парсер ) HTML-документа. Как только парсер встречает конструкцию &{..}; у атрибута контейнера, он передает управление JavaScript-интерпретатору, который, в свою очередь, после исполнения кода это управление возвращает парсеру. Таким образом, данная операция аналогична подкачке графики на HTML-страницу.
Очевидно, что размещать в заголовке документа генерацию текста страницы бессмысленно — он не будет отображен браузером. Поэтому в заголовок помещают декларации общих переменных и функций, которые будут затем использоваться в теле документа. При этом браузер Netscape Navigator более требовательный, чем Internet Explorer. Если не разместить описание функции в заголовке, то при ее вызове в теле документа можно получить сообщение о том, что данная функция не определена.
В Internet Explorer подстановки не поддерживаются, поэтому пользоваться ими следует аккуратно. Прежде чем выдать браузеру страницу с подстановками, нужно проверить тип этого браузера. Альтернативой подстановкам в Internet Explorer можно считать динамические свойства стиля. Например, следующий фрагмент создаст поле ввода, ширина которого в пикселях ( px ) равна количеству символов в адресе страницы, умноженному на 10:
<INPUT TYPE=text style="width:expression(10*location.href.length+'px')">
Мы не будем подробно останавливаться на этом способе использования JavaScript-кода.