Правильная ссылка на эту страницу
http://az-design.ru/Projects/WebStat/JS/01bA01.shtml

Приложение А. Вопросы и ответы

       В этом приложении приведены ответы на наиболее распространенные вопросы, касающиеся применения языка JavaScript.

Языки JavaScript и HTML: обшие вопросы

Вопрос: Что такое язык JavaScript?
       Ответ: Язык JavaScript (ранее известный как LiveScript) — это язык программирования, подобный Java, который обеспечивает большую интерактивность HTML-документов, загружаемых в броузер. Тегам, формирующим HTML-документ, в языке JavaScript соответствуют объекты, свойства которых можно изменять. Язык JavaScript особенно хорош для динамического создания HTML-элементов, в зависимости от внешних событий или условий, таких как наступление заданного времени суток или дня недели, либо выбор пользователем определенных параметров. Язык JavaScript используют также для автоматизации часто выполняемых операций. Операции этого языка позволяют "заставить" Web-страницу автоматически изменять свой внешний вид через заданные промежутки времени, создать простую базу данных или игру и многое другое. Кроме того, язык JavaScript может взаимодействовать с апплетами языка Java или подключаемыми модулями при помощи новой системы LiveConnect, встроенной в броузер Netscape Navigator 3.0 (см. главу 11).

Вопрос: Как взаимодействуют языки HTML и JavaScript?
       Ответ: Броузер Navigator, как и другие Web-броузеры, содержит встроенные средства взаимодействия этих языков. Большинство тегов HTML рассматриваются в броузере как объекты. Например, метке, созданной в теге <а name>...</a>, соответствует объект anchor и т.д. Тегам, для которых определено значение атрибута name, в JavaScript-программе соответствуют именованные объекты. Кроме того, для некоторых тегов, в частности для элементов HTML-форм (полей ввода, областей текста, контрольных переключателей, селекторных кнопок и списков), посредством операторов языка JavaScript можно определить функцию обработки событий. Например, при помощи атрибута onChange можно задать процедуру обработки события, связанного с изменением содержимого этого поля, в теге, создающем поле ввода.

Вопрос: Что такое окно сообщения?
       Ответ: Окно сообщения (alert box) — это окно, которое появляется при обнаружении ошибки в JavaScript-программе. Запомните номер строки, содержащей ошибку, чтобы найти и исправить ее. Окно сообщения исчезнет с экрана после щелчка на кнопке ОК. При обнаружении нескольких ошибок на экран последовательно выводится несколько окон сообщений. В приложении И содержится список сообщений об ошибках языка JavaScript и описание причин их возникновения.

Аудиоинформация

Вопрос: Как поместить в документ звуковую информацию?
       Ответ: Поместить в гипертекстовую страницу звуковую информацию можно двумя способами. Первый способ состоит в использовании HTML-тега <embed>, в котором задается имя звукового файла, подлежащего подключению к странице. Например:

<embed src="screech.au" width=25 height=25>

       В этом случае для воспроизведения звука у пользователя должен быть установлен соответствующий подключаемый модуль.
       Второй способ заключается в загрузке звукового файла при помощи изменения значения свойства location. При этом запускается специальная программа воспроизведения звука (по умолчанию naplayer.exe*{В комплекте поставки Netscape Navigator Gold файл naplayer.exe отсутствует, т.е. подключаемый модуль воспроизведения звука необходимо установить в любом случае. Однако и при интерпретации тега <embed>, и при загрузке аудиофайла как отдельного ресурса броузер, работающий под управлением системы Windows 95 или Windows NT, сначала пытается воспользоваться стандартными приложениями системы и загружает подключаемые модули только при их отсутствии.}, поставляемая в комплекте с броузером Navigator 3.0). Например:

<script language="JavaScript">
location = "screech.au";
</script>

       Если поместить эту программу в документ, броузер Navigator загрузит и воспроизведет звуковой файл. Чтобы все работало, необходимо установить соответствующие программные (программу для воспроизведения звука) и аппаратные (звуковую карту и звуковые колонки) средства. Броузер Microsoft Internet Explorer может воспроизводить звук в фоновом режиме, что задается при помощи специальных HTML-тегов. Подробное описание броузера Microsoft Internet Explorer можно найти по адресу http://www.microsoft.com.

Переменные языка JavaScript

Вопрос: Какую область действия имеют переменные?
       Ответ: В языке JavaScript все переменные связываются с документом, загруженным в текущее окно. Поэтому при загрузке нового документа созданные переменные пропадают. Для преодоления этой проблемы используются фреймсодержащие документы, и переменные определяются в документе верхнего уровня (родительском документе). При этом даже после загрузки во фреймы различных ресурсов документ верхнего уровня всегда остается в памяти. Для обращения к переменным, определенным в родительском документе, служат свойства top и parent объекта window. Значения переменных можно сохранять и по-другому, используя временные или постоянные "ключики", которые представляют собой небольшие фрагменты информации, записываемые на локальный диск. ("Ключики" подробно описаны в главе 13, а фреймсодержащие документы — в главе 9.) Переменные, определяемые в документах, которые загружаются в отдельные фреймы, не являются глобальными. Для обращения к переменной (функции), определенной в другом окне или фрейме, необходимо точно указывать иерархию объектов. Например, для обращения к переменной variableName, определенной в документе, загруженном в первый фрейм, следует использовать выражение

parent.frames[i].document.variableName

       а если эта переменная определена в документе, загруженном в автономное окно windowName — выражение

windowName.document.variableName

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

var myVar = 68;

       эквивалентен оператору

myVar = 68;

фреймсодержащие документы

Вопрос: При обращении к Файлам из Фрейма (например, к Файлам рисунков) ни один из них не загружается. В чем ошибка?
       Ответ: Если вы записываете HTML-документ в новое окно при помощи метода window.open(), то к файлам следует обращаться, используя их полные адреса URL. Адреса вида http://host/path позволяют обратиться к сетевым документам, а адреса вида file:///drive | c/path — к локальным. Можно использовать и тег <base href = URL>. При динамической записи этого тега в окно, применяйте операторы следующего вида:

myWin.document.write("<base href=" + location + ">");

       и броузер Navigator найдет нужные вам файлы.

Вопрос: Как загрузить Фрейм, не обращаясь к отдельному Файлу?
       Ответ: Для загрузки фрейма можно использовать адрес URL типа java-script: ... . При этом в JavaScript-программе следует определить переменную, содержащую текст, который вы хотите загрузить во фрейм, а затем обратиться к этой переменной в атрибуте src тега <frame>. Например:

var topFrame = "<body>Some <b>HTML</b> text</body>";
<frame src="javascript:parent.topFrame">

       В главе 9 рассказывается о принципах использования адресов URL типа javascript: ... при работе с фреймсодержащими документами.

Вопрос: Как получить пустой Фрейм?
       Ответ: Используйте адрес URL типа javascript:..., задав в соответствующей переменной пустой контейнер <body>. . .</body>, например:

var emptyFrame = "<body></body>";
<frame src="javascript:parent.emptyFrame">

       Кроме того, в качестве значения атрибута src в теге <frame> можно применять символ #:

<frame src="#">

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

<frame src="javascript:">

       где применяется адрес URL типа javascript: ..., который не ссылается на переменную. Однако и этот способ иногда приводит к сбоям в работе броузера. При загрузке ресурса с адресом URL типа javascript:... должно выполняться заданное JavaScript-выражение, возвращающее строку, которая является документом. Рекомендуемым решением является выражение вида parent:variable.

Вопрос: Что такое неизвестная (anonymous) ошибка, сообщение о которой появляется при обращении к полю из окна?
       Ответ: Сообщение о неизвестной (anonymous) ошибке может появиться при попытке обращения к полю формы из окна или фрейма, когда документ загружен не полностью. Если вызов функции, которая обращается к полю формы, помещен в тег <script>, могут возникнуть затруднения. Чтобы избежать этой ошибки, вызывайте функцию в теге <body> при помощи атрибута обработчика события onLoad. Это обеспечит обращение функции к реально существующим объектам после окончания загрузки документа.

Вопрос: Как обратиться к Функциям, определенным в других Фреймах?
       Ответ: Используйте обычный синтаксис:

parent.framename.functionName()

       Тем не менее лучше определять все функции в родительском фреймсодержащем документе, а для обращения к ним применять выражения вида parent.functionName(). Синоним parent представляет собой ссылку на родительское окно, в данном случае окно броузера Navigator, в которое загружен родительский документ. Можно также использовать синоним top, в данном случае результат будет таким же, как при использовании синонима parent. Однако при работе с динамически создаваемыми фреймсодержащими документами, вложенными друг в друга, следует применять только синоним top. Подробности см. в главе 9.

Вопрос: Можно ли выяснить, какой из фреймов активен в данный момент, т.е. имеет Фокус ввода?
       Ответ: К сожалению, нет. Не существует такого свойства объекта frame, при помощи которого пользователь мог бы определить, какой фрейм имеет фокус ввода. Однако, возможно, такая функция будет реализована в броузере Navigator следующих версий. При помощи метода focus() можно передать фокус ввода автономному окну, однако использовать этот метод для передачи фокуса ввода фрейму (который также является объектом window) невозможно. Активизация программным путем различных HTML-элементов в других фреймах (запись значений в поля ввода, выбор переключателей и т.п.) также не приводит к передаче фокуса ввода в эти фреймы.

Вопрос: Почему при возвращении к Фреймсодержашему документу посредством гиперсвязи Фреймы дублируются?
       Ответ: В атрибуте target тега <а href>, применяемого для возвращения к предыдущему документу, необходимо указать имя фреймсодержащего документа верхнего уровня. Это обеспечит загрузку исходного фреймсодержащего документа в главное окно броузера, а не во фрейм, что происходит в вашем случае. Об использовании атрибута target тега <а href> рассказано в главе 9. Эта ошибка достаточно широко распространена.

Теги <scinpt> и <noscript>

Вопрос: Почему контейнер <script>...</scripf> нужно помешать внутри комментариев?
       Ответ: Это необходимо для обеспечения совместимости документов сверху вниз (обратной совместимости) с другими Web-броузерами. Если не использовать комментариев, в некоторых броузерах текст JavaScript-программы будет выведен на экран, как часть HTML-документа. Броузеры, поддерживающие язык JavaScript, распознают текст программы, содержащийся в тегах комментариев, а броузеры, которые не поддерживают этот язык, будут игнорировать и тег <script>, и саму программу. Рассмотрим следующую программу:

<!--
Program A-1 
-->
<script language="JavaScript">
alert ("Hello, World!");
</script>

       Если опустить последовательности символов <!-- и //-->, то в окне броузера, не поддерживающего язык JavaScript, появится строка "alert ("Hello, world") ". Обратите внимание, что завершает комментарий последовательность символов //-->, а не просто HTML-тег, закрывающий комментарий -->. Дело в том, что этот тег находится в контейнере <script>. . .</script>, где не воспринимается обычный язык HTML, и последовательность символов --> рассматривается как ошибочный оператор языка JavaScript. Поэтому перед закрывающим тегом комментария языка HTML необходимо приписывать комментарий языка JavaScript (символы //).

Вопрос: Является ли атрибут language обязательным?
       Ответ: Если в теге <script> атрибут src не задан, атрибут language использовать обязательно. Атрибут src предоставляет возможность загружать JavaScript-программу из файла, расположенного на удаленном Web-сервере.

Вопрос: В каком месте HTML-документа можно размешать теги <script>?
       Ответ: Скрипт может находиться в любом месте HTML-документа. Большинство скриптов размещаются в контейнере <head>... </head>, потому что он находится в начале HTML-документа и загружается в первую очередь. Это особенно полезно, если вам нужно загрузить описания функций или инициализировать переменные. Тег <scr ipt> можно размещать и в теге <body>. Тогда появится возможность динамически записывать в документ необходимый текст. Например:

<!--
Program A-2 
-->
<html>
<body text="White">
<table bgcolor="Blue" width="100%">
<tr>
<td>
<script language="JavaScript">
document.write(Date().substring(0,10));
//-->
</script>
</td>
</tr>
</table
</body>
</html>

       Данная программа выводит на экран текущую дату в ячейке HTML-таблицы. Цвет фона таблицы установлен при помощи нового атрибута bgcolor броузера Atlas (Navigator 3.0). Этот прием можно использовать при выводе на экран строки заголовка в документе.

Вопрос: Для чего применяется тег <noscript>?
       Ответ: Содержимое контейнера <noscript>. . .</noscript> отображается на экране в том случае, если в броузере Navigator отключена поддержка языка JavaScript. Броузеры, не поддерживающие язык JavaScript, игнорируют этот тег. Таким образом, теги <noscript> и </noscript> распознаются преимущественно броузерами Netscape.*{На самом деле большинство используемых в настоящее время броузеров замечательно распознают теги <scnpt> и <noscript>.} С помощью контейнера <noscript>.. .</noscript>, можно создать некоторый альтернативный документ, отображаемый в том случае, если броузер пользователя не поддерживает язык JavaScript. Функции тега <noscript> аналогичны функциям тега <nof rame> (см. главу 9).

Вопрос: Для чего предназначен атрибут src?
       Ответ: Атрибут src тега <script> задает адрес URL файла, в котором хранится текст JavaScript-программы. В этом случае программа не встраивается в документ, а хранится в отдельном файле.**{Это особенность броузера Navigator. Другие броузеры, в частности Internet Explorer, не позволяют помещать скрипты в отдельные файлы.} Это напоминает работу тега <applet> с апплетами языка Java. Чтобы броузер Navigator правильно распознавал язык скрипта и загружал файлы программ, эти файлы должны иметь расширения js, например cookie.js.

Операторы языка JavaScript

Вопрос: Нужно ли ставить точку с запятой после каждого оператора JavaScript?
       Ответ: На этот Вопрос: невозможно дать однозначный ответ. В отдельных операторах JavaScript, задаваемых в атрибутах HTML-тегов, точки с запятой (;) ставить не обязательно. Однако если в атрибуте обработки события задано несколько операторов JavaScript, необходимо ставить точку с запятой после каждого оператора (за исключением последнего). Например, в следующем фрагменте

<а href="http://www.host.com/dir/pagel.html"
   onClick="window.status='Click here for page 1';
           return true">
Click me!
</a>

       точка с запятой необходима для разделения двух JavaScript-операторов, заданных в атрибуте события onclick. Однако после операторов

tortoiseAge = 102
PetName = "Tortoise"

       вводить сивол точки с запятой не обязательно, потому что каждый из операторов находится в отдельной строке.*{Интерпретация операторов JavaScript зависит от конкретного броузера, поэтому лучше не рисковать, а честно расставлять символы точки с запятой после каждого оператора. Возможность располагать операторы в разных строках, не разделяя их точкой с запятой, вероятно, является особенностью только броузера Navigator.} Использование этого символа позволит расположить операторы в одной строке:

tortoiseAge = 102;
PetName = "Joey"

       Несмотря на то, что оба оператора находятся в одной строке, интерпретатор языка JavaScript узнает, где заканчивается один оператор и начинается другой.

Вопрос: Как правильно использовать кавычки в операторе?
       Ответ: Вводите перед кавычками символ обратной косой черты (\), например:

<а href="http://www.host.com/dir/page1.html"
   onClick="window.status=\"Click here for page 1\";
   return true">
Click me!
</a>

       Тем не менее использовать вложенные кавычки можно лишь до определенного предела. Поэтому старайтесь не допускать многократной вложенности строк и по возможности упрощайте выражения со строками.

Средства ввода пользовательской информации в языке JavaScript

Вопрос: Как предоставить пользователю возможность ввести информацию в JavaScript-программу?
       Ответ: Первый способ состоит в использовании метода prompt() языка JavaScript. Например, в операторе:

var name = prompt ("Enter your e-mail address", "user@host");

       "user@host" — значение, которое используется по умолчанию, и помещается в поле ввода диалогового окна.
       Второй способ требует применения HTML-формы и определения необходимых полей для ввода пользовательских данных. Программа на языке JavaScript может обращаться к полям формы и даже динамически изменять их содержимое. HTML-формы описаны в главе 7.

События языка JavaScript

Вопрос: Можно пи активизировать JavaScript-функиию после загрузки страницы?
       Ответ: Да, это позволяет сделать новый атрибут onLoad в HTML-теге <body>. Например:

<html>
<body onLoad="updateFrame()">
</body>
</html>

       Функция updateFrame() вызывается после того, как текущий документ полностью загружен. В этом случае термин загружен означает, что все HTML-элементы считаны в броузер Navigator и синтаксически проверены (определение термина загрузка документа вызвало много дискуссий, поскольку иногда событие onLoad запускалось, когда рисунки в документе еще загружались). Чтобы избежать путаницы, необходимо помнить, что событие onLoad запускается не тогда, когда документ начинает загружаться, а тогда, когда загрузка документа закончена. Атрибут onLoad используется для вызова JavaScript-функций после полной загрузки документа.

Вопрос: При помощи обрабатывающего события атрибута onLoad не получается динамически создать HTML-документ. Как это делается?
       Ответ: Чтобы записывать данные в HTML-документ сразу после начала его загрузки, сначала создайте простую функцию, описывающую тег <body> (и все его содержимое). Затем сразу после описания этой функции запишите ее вызов и вставьте в конец документа тег </body>.
       Например:

<!--
Program A-3 
-->
<html>
<head>
<script language="JavaScript">
<!--
function startBody() {
   document.writeln ("<htmlxbody" +
                     "background=backl.gif text=#0000ff>");
}
// Call the function to start the body:
startBody();
//-->
</script>
</head>
This is where your actual HTML body text goes...
</body>
</html>

       Скрипт в верхней части HTML-документа определяет функцию startBody(), которая динамически создает первую часть контейнера <body>... </body>.

Вопрос: Как вызвать Функцию языка JavaScript при помощи события?
       Ответ: Одним из решений является определение кнопки в HTML-форме При этом для вызова JavaScript-функции используется атрибут обработчика события onclick. Например, фрагмент

<form name="myForm">
<input type="button"
       value="Click me"
       onClick="myFunc()">
</form>

       создает в документе кнопку, при нажатии которой вызывается JavaScript-функция myFunc(). JavaScript-функцию можно активизировать и автоматически. Для этого следует описать ее, а затем немедленно вызвать. В следующем фрагменте

<script language="JavaScript">
<!-- 
function myFunc() {
}
myFunc();
//-->
</script>

       определяется и вызывается функция myFunc(). Однако будьте внимательны, используя этот способ, потому что при попытке обратиться к JavaScript-объекту, например к полю ввода, определенному в теге <input>, может появиться сообщение о том, что объект является неизвестным (anonymous). Появление такого сообщения вызвано тем, что объект создается после полной загрузки документа. Если все поля, к которым вы обращаетесь, определены в теге <body>, вызов функции для обращения к этим полям до того, как броузер Navigator просмотрит их, приведет к ошибке: Property not found (свойство не найдено). Другое решение этой проблемы заключается в вызове функции в теге <body> при помощи атрибута onLoad, как показано в следующем фрагменте:

<body onLoad="myFunc()">
</body>

       где функция myFunc() вызывается после полной загрузки документа, который эту функцию содержит.

Язык JavaScript и HTML-Формы

Вопрос: Как обратиться к Форме, содержащейся в документе?
       Ответ: К формам обращаются при помощи массива forms, который является свойством объекта document. Так, значение выражения

document.forms[0]

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

parent.frames[0].document.forms[0]

       возвращает ссылку на первую форму, отображаемую в первом фрейме текущего фреймсодержащего документа. При обращении к отдельным фреймам необходимо указывать объект parent (см. главу 9). Для того чтобы обратиться к определенным данным формы, например к содержимому поля ввода, к приведенному выражению следует добавить имя этого поля и свойство value. Например, выражение

document.forms[0].myField.value

       позволяет получить значение поля myField первой формы текущего документа.
       Если при помощи атрибута name тега <form> задано имя формы, например <form name="myForm">, TO массив forms при обращении к ЭТОЙ форме указывать не обязательно. Его можно заменить значением атрибута name, как показано в следующем выражении:

document.myForm.myField.value

Вопрос: В сообщении об ошибке сказано, что поля формы не существует. В чем дело?
       Ответ: Прежде всего, проверьте правильность имен и значений индексов для всех используемых объектов. Кроме того, ошибка может возникнуть при вызове JavaScript-функции, обращающейся к полю формы, когда документ загружен в броузер Navigator не полностью. В таких случаях вызов функции следует помещать в тег <body onLoad = ...>. Проверьте также правильность задания имени для поля формы в программе и в HTML-теге. Помните, что язык JavaScript различает регистр символов, поэтому проверяйте также соответствие регистра символов в имени поля. Если атрибут name поля формы не определен, то для обращения к нему можно использовать массив elements (см. главу 7).
       Кроме того, при использовании методов open() и close() для динамического создания документов следует проверить, не перезаписываете ли вы документ, содержащий переменную, при попытке обращения к которой у вас возникают проблемы. При обновлении документа удаляются все переменные и функции, если только вы не используете фреймсодержащий документ и не храните все переменные и функции в родительском документе верхнего уровня. В главе 9 приведено описание фреймсодержащих документов и приемов сохранения программ и данных.

Вопрос: При выполнении числовых вычислений с помошыо полей формы получаются очень большие числа. Как правильно их округлить?
       Ответ: Используйте функцию roundValue(), описанную в приложении Г. Это позволит вам преобразовать, например, число 14,9999995 в число 15,0 и т.п.

Динамическое создание HTML-документов

Вопрос: Как отобразить текст, динамически созданный в JavaScript-программе, в окне броузера Netscape?
       Ответ: Это можно сделать с помощью функций document.write() и document.writeln(). Вторая функция добавляет к записываемой строке код возврата каретки. Например, в следующем вызове функции

document.writeln ("<tablextr><td>This is some HTML-formatted " + 
                  "text within a table</td></tr></table>");

       в броузер Navigator записывается строка, которая содержит HTML-теги, формирующие таблицу. Благодаря возможности динамически формировать HTML-текст, который записывается в окно броузера, с помощью JavaScript-программ вы можете изменять вид документов в зависимости от внешних условий (даты, времени) или введенных пользователем данных. Хорошей идеей является и размещение вызовов метода write() между вызовами методов document.open() и document.close(), особенно если вы хотите изменить весь документ или обновить содержимое всего фрейма. Создавая документы динамически, ни в коем случае не записывайте данные в документ беспорядочно, поскольку это может вывести Navigator из строя. Всегда старайтесь передавать броузеру данные в одном общем потоке. Для управления потоком данных используйте методы document.open() и document.close(). Например, поток данных в первый фрейм фреймсодержащего документа необходимо открывать при помощи оператора

parent.frames[0].document.open();

       После записи данных поток обязательно следует закрыть.

Вопрос: Что такое встроенные вычисления языка JavaScript?
       Ответ: В броузер Navigator версии 3.0 введена очень важная возможность — вычисление встроенных выражений языка JavaScript. По существу, это способ вычисления JavaScript-выражений, значения которых сразу же подставляются в атрибуты HTML-тегов. Для этого используется запись вида

&{ expression };

       где expression — это JavaScript-выражение, которое может быть JavaScript-переменной, объектом или целым математическим выражением. Например, вместо того чтобы жестко задать цвет фона документа в теге

<body bgcolor="Blue">

       можно вычислять значение атрибута bgcolor В следующей программе цвет фона текущей страницы изменяется в зависимости от дня недели.

<!--
Program A-4 
-->
<html>
<script language="JavaScript">
function getTheDay{} {
   var dateToday = new Date();
   var dayToday = dateToday.getDay(); // Day number 0-6
   if (dayToday >= 3)
      backcolor = "Blue";
   else
      backcolor = "Black";
}
getTheDay();
</script>
<body bgcolor="&{ backcolor }; ">
This is the body of the document.<p>
</body>
</html>

       День недели определяется при помощи метода getDay(). Если текущим днем является среда или последующие дни недели, для фона устанавливается голубой (Blue) цвет, в противном случае фон документа будет черным. Заметьте, что во встроенном выражении используется переменная backcolor, значением которой является ключевое слово, задающее цвет фона страницы. Применение встроенных вычислений имеет неограниченные возможности. Например, автор предпочитает устанавливать различные шрифты в документах при помощи выражения <font face="&{parent.globalFont} ">, где parent.globalFont — переменная, содержащая имя шрифта, которое определяется в родительском фреймсодержащем документе.
       Помните, что вычисление выражений может производиться только при определении значений атрибутов HTML-тегов. Учтите также, что в качестве вычисляемых выражений нельзя использовать операторы JavaScript-программы, поскольку они не вычисляются, а выполняются.

Вопрос: Можно ли создавать скрипты и апплеты динамически?
       Ответ: Да. Запишите в документ тег <script> или <applet> при помощи метода document.write(), и броузер Navigator соответствующим образом интерпретирует его, так же, как если бы они были записаны в исходном тексте документа.
       * Выражение "создать апплет" не совсем корректно. При помощи скрипта можно сформировать текст другой JavaScript-программы либо HTML-теги, но не содержимое апплета. Таким образом, скрипт позволяет не создать апплет, а всего лишь динамически включить готовый апплет в документ.

Вопрос: Можно ли добавлять текст в документы, когда они уже полностью выведены на экран?
       Ответ: Для добавления текста в документ, который полностью выведен на экран, методы document.write() и document.writeln() использовать не рекомендуется. В идеале следует обновить или заново сформировать весь документ, а затем повторно вывести его на экран. Можно применять методы document.open() и document.close() для записи в броузер потока текста как одной непрерывной порции данных. Тем не менее метод document.writeln() позволяет добавлять данные в документ, если предварительно не вызван метод open(), т.е. если не создан новый поток данных, записываемых в документ.

Метки и гиперсвязи

Вопрос: Существует ли в языке JavaScript эквивалент тега <а href="#anchor">?
       Ответ: Да. Используйте свойство hash объекта location. Например, JavaScript-оператор

location.hash = "section1";

       переместит вас к метке, заданной в теге <а name="section1"> (предполагается, что такая метка существует). Этот способ требует перезагрузки документа, поэтому его не рекомендуется применять для документов большого объема.

Вопрос: Можно ли создавать метки и гиперсвязи динамически?
       Ответ: Да. Для этой цели служат методы anchor() и link() (см. главу 2).

Свойства объектов языка JavaScript

Вопрос: Как изменять свойства документов при помоши языка JavaScript?
       Ответ: Некоторые свойства документов можно изменять в JavaScript-программах. Например, при выполнении оператора

document.bgColor="Black";

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

Управление окнами

Вопрос: Как открыть новое окно?
       Ответ: Чтобы открыть новое окно, следует использовать метод window.open() (см. главу 8).

Вопрос: Как обратиться к переменным и Функциям, определенным в родительском окне?
       Ответ: Новое независимое окно броузера открывается при помощи метода window.open() языка JavaScript. В этом случае свойство parent не может применяться так, как при работе с фреймсодержащими документами, создаваемыми при помощи тега <frameset>. Для обращения к родительскому окну текущего окна, т.е. к окну, в котором вызывается метод open(), необходимо использовать свойство opener. Свойства parent и top не применимы к автономным окнам. Для обращения к переменным или функциям, определенным в документе, который загружен в другое окно, в любом случае следует указывать полную иерархию объектов. Например, выражение

opener.frames[0].document.myFunc()

       обращается к функции myFunc(), определенной в документе, который загружен в первый фрейм документа, отображаемого в родительском окне. Если функции и переменные определены в других фреймах, пользуйтесь примером программы, приведенным в главе 8. Эта программа использует оператор цикла для просмотра всех окон и поиска требуемой функции и/или переменной. Имеет смысл определять все функции и переменные в одном документе, например в родительском фреймсодержащем документе, а затем обращаться только к этому документу (определение многих функций в разных документах может сделать JavaScript-приложения чересчур сложными).

Вопрос: Как загрузить ресурс в определенное окно?
       Ответ: Для этого следует передать адрес URL требуемого ресурса в качестве первого аргумента методу open(). Можно сделать по-другому: динамически изменить адрес URL в уже созданном окне, присвоив новое значение свойству location этого окна. Поэтому выполнение операторов

w1 = open("", "myWin", "height=300, width=500"););
w1.location = "newfile.htm";

       приведет к тем же результатам, что и выполнение одного оператора

w1 = open("newfile.htm", "myWin", "height=300,width=500");

       Свойство location объекта window дает возможность в любое время загрузить в это окно новый ресурс (или локальный файл), например, посредством нажатия кнопки.

Доступ к Файлам

Вопрос: Как получить доступ к локальным Файлам из JavaScript-программы?
       Ответ: По соображениям безопасности язык JavaScript, используемый в броузерах Navigator версий 2.0 и 3.0, не имеет стандартных средств, обеспечивающих доступ к локальным файловым системам. Доступ к локальным файлам позволяют получить программы на языке Java.*{Точнее говоря, язык JavaScript вообще не располагает средствами доступа к файлам. А имеющий такие средства язык Java не может использовать их для доступа к файлам клиента, поскольку это является нарушением требований безопасности Internet.} Однако использовать такой способ доступа не рекомендуется, поскольку он, возможно, не будет работать в броузере Navigator следующих версий. В новом броузере компании Netscape (проект Galileo) предусмотрена схема надежного апплета (trusted applet), при помощи которой Java-апплеты смогут записывать информацию на сервер или на локальный пользовательский диск. Более подробную информацию можно получить по адресу:

http://homeMetscapexom/comprod/at_work/whitejpaper/intranet/vision.html.




<<< Пред. Оглавление
Начало раздела
След. >>>

Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:56 MSK


Постоянный адрес статьи:
http://az-design.ru/Projects/WebStat/JS/01bA01.shtml