Как записать алгоритм для компьютера на js

Обновлено: 06.07.2024

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

Рассмотрим, из чего состоят веб-странички. HTML (HyperText Markup Language) отвечает за придание странице структуры (показывает, где меню сайта, а где заголовок, логотип или статья) и контента (различные тесты, списки, изображения и т. д.). CSS (Cascading Style Sheets) отвечает за визуальную составляющую страницы: определяет, какого цвета и размера должен быть тот или иной блок, как его оформить и вывести пользователю.

Структура и оформление есть, но где же взаимодействие? Здесь на сцену выходит JavaScript. Виртуальный «диалог» с пользователем — от изменения части содержимого сайта в ответ на действия до современных игр в браузере — реализуется с помощью скриптов JavaScript. Этот язык программирования работает в браузере и позволяет взаимодействовать с веб-страницей в режиме реального времени, оживляя её и предоставляя пользователю обратную связь на все действия.

У JavaScript очень интересная история. Он — реализация стандарта ECMAScript, может работать не только в браузере. Но в статье мы рассмотрим только взаимодействие с браузером.

Создаём самый простой скрипт

В первом задании, которое традиционно выполняет студент при изучении языка программирования, нужно вывести на экран фразу «Hello, world». Это позволяет отработать самый важный аспект — вывод информации пользователю, а также познакомиться с базовой структурой программы. Поступим так же.

Есть множество способов что-то вывести на экран в браузере, но мы выберем самый простой. Откроем «Инструменты разработчика» (Developer Tools) в браузере Chrome. Сделать это можно через сочетание клавиш Ctrl + Shift + I или F12 (Cmd + Opt + I на macOS) или через меню браузера. В Google Chrome нужно нажать на три точки, в других браузерах эта настройка может выглядеть иначе. Далее выбираем пункт «Дополнительные инструменты» и «Инструменты разработчика».


У вас должно появиться примерно такое окно, как ниже. Какой именно сайт выбрать для работы, не важно, можете открыть и GeekBrains.


Нас интересует вкладка Console. В ней могут быть ошибки и предупреждения (красные или жёлтые надписи) — не обращайте на них внимания, они нам не помешают. Выполним задание — выведем «Hello, world» на экран. Для этого нам понадобится команда alert(). Она выводит текст, который передан в круглых скобках.

Обратите внимание на регистр — здесь он имеет значение. Также не упустите кавычки — любой текст мы обязаны обрамлять в двойные или одинарные кавычки.


Мы выполнили первое задание — вывели простой текст на экран.

Учимся писать чуть более сложные скрипты

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

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

Для создания переменной в JavaScript нужно применить ключевое слово let. Есть и другие, но не будем так глубоко погружаться в детали.

Требования к именованию переменных:

  1. Имя переменной не может начинаться с цифры.
  2. Имя переменной может содержать только буквы, цифры и символы «$» и «_».
  3. Здравый смысл подсказывает нам, что имя переменной должно отражать суть того, что в ней находится.

Создадим простую переменную, поместив в неё имя. Например, Иван.

Обратите внимание: мы объединили слово «привет» и переменную. Здесь имеет значение каждый символ: сначала alert, потом открывающая круглая скобка, которая говорит, что дальнейшие инструкции нужно вывести на экран. Затем кавычки, в которых заключён приветственный текст. Далее знак +, который подсказывает программе, что текст справа от знака нужно объединить с тем, что слева. И завершает это закрывающая круглая скобка.


Мы вывели имя из переменной на экран, но ведь было нужно показать имя, которое сообщит пользователь. Исправим это. Нам понадобится команда prompt(). Она задаст пользователю вопрос — запишем его в круглых скобках. Сохраним в переменную результат выполнения команды prompt().



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

Сохраняем наш первый скрипт

Мы написали программу (скрипт) в консоли браузера. Это было быстро и просто, но не очень практично — такой программой с пользователями не поделишься. Чтобы сделать это, сохраним программу в файл с расширением *.html. Имя можем дать произвольное. Так как HTML подразумевает определённую структуру контента, нужно её отчасти соблюсти, чтобы всё работало. Понадобятся теги <html> и <script>.


Редактировать и сохранять файлы со скриптами можно с помощью любого текстового редактора. Cамый простой и примитивный — «Блокнот», который поставляется вместе с Microsoft Windows. Есть и специальные редакторы кода, например, Visual Studio Code. В блоге даже выходила специальная подборка редакторов кода JavaScript — выбирайте и дерзайте :)

А если хотите извлечь из JavaScript максимум — приглашаем на факультет Fullstack JavaScript-разработки GeekBrains!

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents Loading

Copy raw contents

Copy raw contents

Алгоритмы и структуры данных на JavaScript

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

Для каждого алгоритма и структуры данных есть свой файл README с соответствующими пояснениями и ссылками на материалы для дальнейшего изучения (в том числе и ссылки на видеоролики в YouTube).

☝ Замечание: этот репозиторий предназначен для учебно-исследовательских целей (не для использования в продакшн-системах).

Структура данных (англ. data structure) — программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных в вычислительной технике. Для добавления, поиска, изменения и удаления данных структура данных предоставляет некоторый набор функций, составляющих её интерфейс.

B - Базовый уровень, A - Продвинутый уровень

  • B Связный список
  • B Двунаправленный связный список
  • B Очередь
  • B Стек
  • B Хеш-табица
  • B Куча — максимальная и минимальная версии
  • B Очередь с приоритетом
  • A Префиксное дерево
  • A Деревья
    • A Двоичное дерево поиска
    • A АВЛ-дерево
    • A Красно-чёрное дерево
    • A Дерево отрезков — для минимума, максимума и суммы отрезков
    • A Дерево Фенвика (двоичное индексированное дерево)

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

    B - Базовый уровень, A - Продвинутый уровень

    Алгоритмы по тематике

    • Математика
      • B Битовые манипуляции — получение/запись/сброс/обновление битов, умножение/деление на 2, сделать отрицательным и т.п.
      • B Факториал
      • B Числа Фибоначчи — классическое решение, решение в замкнутой форме
      • B Тест простоты (метод пробного деления)
      • B Алгоритм Евклида — нахождение наибольшего общего делителя (НОД)
      • B Наименьшее общее кратное (НОК)
      • B Решето Эратосфена — нахождение всех простых чисел до некоторого целого числа n
      • B Степень двойки — является ли число степенью двойки (простое и побитовое решения)
      • B Треугольник Паскаля
      • B Комплексные числа — комплексные числа, базовые операции над ними
      • B Радианы и градусы — конвертирование радианов в градусы и наоборот
      • B Быстрое возведение в степень
      • A Разбиение числа
      • A Квадратный корень — метод Ньютона
      • A Алгоритм Лю Хуэя — расчёт числа π с заданной точностью методом вписанных правильных многоугольников
      • A Дискретное преобразование Фурье — разложение временной функции (сигнала) на частотные составляющие
      • B Декартово произведение — результат перемножения множеств
      • B Тасование Фишера — Йетса — создание случайных перестановок конечного множества
      • A Булеан — все подмножества заданного множества (побитовый поиск и поиск с возвратом)
      • A Перестановки (с повторениями и без повторений)
      • A Сочетания (с повторениями и без повторений)
      • A Наибольшая общая подпоследовательность
      • A Наибольшая увеличивающаяся подпоследовательность
      • A Наименьшая общая супер-последовательность
      • A Задача о рюкзаке — "0/1" и "неограниченный" рюкзаки
      • A Максимальный под-массив — метод полного перебора и алгоритм Кадане
      • A Комбинации сумм — нахождение всех комбинаций, сумма каждой из которых равна заданному числу
      • B Расстояние Хэмминга — число позиций, в которых соответствующие символы различны
      • A Расстояние Левенштейна — метрика, измеряющая разность между двумя последовательностями
      • A Алгоритм Кнута — Морриса — Пратта — поиск подстроки (сопоставление с шаблоном)
      • A Z-функция — поиск подстроки (сопоставление с шаблоном)
      • A Алгоритм Рабина — Карпа — поиск подстроки
      • A Наибольшая общая подстрока
      • A Разборщик регулярных выражений
      • B Линейный поиск
      • B Поиск с перескоком (поиск блоков) — поиск в упорядоченном массиве
      • B Двоичный поиск — поиск в упорядоченном массиве
      • B Интерполяционный поиск — поиск в равномерно распределённом упорядоченном массиве.
      • B Сортировка пузырьком
      • B Сортировка выбором
      • B Сортировка вставками
      • B Пирамидальная сортировка (сортировка кучей)
      • B Сортировка слиянием
      • B Быстрая сортировка — с использованием дополнительной памяти и без её использования
      • B Сортировка Шелла
      • B Сортировка подсчётом
      • B Поразрядная сортировка
      • B Прямой обход
      • B Обратный обход
      • B Поиск в глубину
      • B Поиск в ширину
      • B Поиск в глубину
      • B Поиск в ширину
      • B Алгоритм Краскала — нахождение минимального остовного дерева для взвешенного неориентированного графа
      • A Алгоритм Дейкстры — нахождение кратчайших путей от одной из вершин графа до всех остальных
      • A Алгоритм Беллмана — Форда — нахождение кратчайших путей от одной из вершин графа до всех остальных
      • A Алгоритм Флойда — Уоршелла — нахождение кратчайших расстояний между всеми вершинами графа
      • A Задача нахождения цикла — для ориентированных и неориентированных графов (на основе поиска в глубину и системы непересекающихся множеств)
      • A Алгоритм Прима — нахождение минимального остовного дерева для взвешенного неориентированного графа
      • A Топологическая сортировка — на основе поиска в глубину
      • A Шарниры (разделяющие вершины) — алгоритм Тарьяна (на основе поиска в глубину)
      • A Мосты — на основе поиска в глубину
      • A Эйлеров путь и Эйлеров цикл — алгоритм Флёри (однократное посещение каждой вершины)
      • A Гамильтонов цикл — проходит через каждую вершину графа ровно один раз
      • A Компоненты сильной связности — алгоритм Косарайю
      • A Задача коммивояжёра — кратчайший маршрут, проходящий через указанные города с последующим возвратом в исходный город
      • B Полиноминальный хэш — функция кольцевого хэша, основанная на полиноме
      • B Нано-нейрон — 7 простых JavaScript функций, отображающих способности машины к обучению (прямое и обратное распространение)
      • B Ханойская башня
      • B Поворот квадратной матрицы — используется дополнительная память
      • B Прыжки — на основе бэктрекинга, динамического программирования (сверху-вниз + снизу-вверх) и жадных алгоритмов
      • B Поиск уникальных путей — на основе бэктрекинга, динамического программирования и треугольника Паскаля
      • B Подсчёт дождевой воды — на основе перебора и динамического программирования
      • B Задача о рекурсивной лестнице — подсчёт количества путей, по которым можно достичь верха лестницы (4 способа)
      • A Задача об N ферзях
      • A Маршрут коня

      Алгоритмы по парадигме программирования

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

      • Алгоритмы полного перебора — поиск лучшего решения исчерпыванием всевозможных вариантов
        • B Линейный поиск
        • B Подсчёт дождевой воды
        • B Задача о рекурсивной лестнице — подсчёт количества путей, по которым можно достичь верха лестницы
        • A Максимальный подмассив
        • A Задача коммивояжёра — кратчайший маршрут, проходящий через указанные города с последующим возвратом в исходный город
        • A Дискретное преобразование Фурье — разложение временной функции (сигнала) на частотные составляющие
        • B Прыжки
        • A Задача о неограниченном рюкзаке
        • A Алгоритм Дейкстры — нахождение кратчайших путей от одной из вершин графа до всех остальных
        • A Алгоритм Прима — нахождение минимального остовного дерева для взвешенного неориентированного графа
        • A Алгоритм Краскала — нахождение минимального остовного дерева для взвешенного неориентированного графа
        • B Двоичный поиск
        • B Ханойская башня
        • B Треугольник Паскаля
        • B Алгоритм Евклида — нахождение наибольшего общего делителя (НОД)
        • B Сортировка слиянием
        • B Быстрая сортировка
        • B Поиск в глубину (дерево)
        • B Поиск в глубину (граф)
        • B Прыжки
        • B Быстрое возведение в степень
        • A Перестановки (с повторениями и без повторений)
        • A Сочетания (с повторениями и без повторений)
        • B Числа Фибоначчи
        • B Прыжки
        • B Поиск уникальных путей
        • B Подсчёт дождевой воды
        • B Задача о рекурсивной лестнице — подсчёт количества путей, по которым можно достичь верха лестницы
        • A Расстояние Левенштейна — метрика, измеряющая разность между двумя последовательностями
        • A Наибольшая общая подпоследовательность
        • A Наибольшая общая подстрока
        • A Наибольшая увеличивающаяся подпоследовательность
        • A Наименьшая общая суперпоследовательность
        • A Рюкзак 0-1
        • A Разбиение числа
        • A Максимальный подмассив
        • A Алгоритм Беллмана — Форда — поиск кратчайшего пути во взвешенном графе
        • A Алгоритм Флойда — Уоршелла — нахождение кратчайших путей от одной из вершин графа до всех остальных
        • A Разборщик регулярных выражений
        • B Прыжки
        • B Поиск уникальных путей
        • B Булеан — все подмножества заданного множества
        • A Гамильтонов цикл — проходит через каждую вершину графа ровно один раз
        • A Задача об N ферзях
        • A Маршрут коня
        • A Комбинации сумм — нахождение всех комбинаций, сумма каждой из которых равна заданному числу

        Как использовать этот репозиторий

        Установка всех зависимостей

        Запуск ESLint

        Эта команда может потребоваться вам для проверки качества кода.

        Запуск всех тестов

        Запуск определённого теста

        Песочница

        Вы можете экспериментировать с алгоритмами и структурами данных в файле ./src/playground/playground.js (файл ./src/playground/__test__/playground.test.js предназначен для написания тестов).

        Для проверки работоспособности вашего кода используйте команду:

        Нотация «О» большое

        Нотация «О» большое используется для классификации алгоритмов в соответствии с ростом времени выполнения и затрачиваемой памяти при увеличении размера входных данных. На диаграмме ниже представлены общие порядки роста алгоритмов в соответствии с нотацией «О» большое.

        Big O graphs

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

        Решение частых алгоритмических вопросов на JavaScript

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

        Разворот строки

        Задача

        Получив строку, необходимо развернуть её.

        Решение №1

        Мы можем использовать метод string.substring(), позволяющий взять каждую букву параметра str и добавить её в новую строку. Метод подстроки принимает один обязательный параметр и один необязательный параметр.

        Первый параметр — это индекс, с которого вы хотите начать подстроку. Это инклюзивное значение, если вы пишете myString.substring(1), вывод будет включать в себя первый символ.

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

        Давайте напишем два алгоритма решения для возврата обратной строки.

        Решение №2

        Один из самых быстрых встроенных способов решения этой проблемы — разбить каждый символ в строке на элемент массива, перевернуть элементы в массиве и превратить элементы массива обратно в строку.

        Мы будем использовать следующие методы:

        string.split() — разбивает каждый символ на индекс массива.
        string.reverse() — разворачивает элементы массива в обратном порядке.
        string.join() — объединяет все элементы массива в строку.

        Вы можете связать эти три функции вместе для элегантного решения.

        Самое длинное слово

        Задача

        Вернуть длину самого длинного слова в проверяемом предложении.

        Решение №1

        Далее мы можем перебрать каждый элемент массива и подсчитать количество букв в каждом слове. Мы можем отследить самое длинное слова в предложении. Если текущее значение слова больше максимального значения слова, сохраненного в данный момент, заменяем его! Затем просто возвращаем переменную, содержащую самое длинное слово.

        Вы можете перебрать массив с помощью цикла for или метода array.forEach(). Я предпочитаю последнее, но я включила и то, и другое ниже.

        Решение №2

        Чтобы оптимизировать это решение, мы всё равно будем использовать метод string.split(), который позволяет разделить предложение на элементы массива по словам.

        Далее мы будем использовать метод array.map(), который позволяет взаимодействовать с различными значениями каждого элемента массива. Это вернет совершенно новый массив с необходимыми значениями, поэтому мы сохраним его в новой переменной.

        Для каждого элемента в массиве вернём длину строки и сохраним её в новом массиве под названием arrOfLengths.

        Массив наибольших значений вложенного массива

        Задача

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

        Решение №1

        В качестве первого решения мы можем начать с вложенного цикла for-loop.

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

        Решение №2

        Данная статья является лишь одной из частей цикла статей. Автор оригинальной статьи планирует делать продолжение, а в случае выхода новых частей — я подготовлю перевод!

        Приготовления к написанию кода JavaScript

        Для начала надо определиться, в чем мы будем писать свои примеры. Сцена­рии JavaScript можно писать в любом текстовом редакторе. Существуют тек­стовые редакторы от сторонних разработчиков с более продвинутыми функ­циями, например, подсветкой синтаксиса языка. Я же все свои примеры писал в программе Блокнот, входящем в состав любой Windows. Это самый простой путь, не требующий установки новых программ. Тем более, у вас не будет другого выбора, если у вас нет в данный момент подключения к Ин­тернету или диска с нужными программами, а также прав администратора для установки сторонних программ.

        Так как сценарии используются в основном в Web-страницах, то для начала надо эту самую Web-страницу создать. Алгоритм действий следующий. От­крываем папку Мои документы в Проводнике и создаем новую папку — JavaScript в примерах. Далее, открываем созданную папку, щелкаем правой кнопкой мыши на свободном месте и выбираем последовательно пункты контекстного меню Создать | Текстовый документ . В результате наших ма­нипуляций будет создан пустой файл под именем Текстовый документ .txt . Так как Web-страницы имеют расширение htm или html , то щелкаем правой кнопкой мыши на созданном файле, выбираем команду Переименовать и присваиваем файлу новое имя, например, 1.htm. Windows спросит вас, дейст­вительно ли вы хотите присвоить файлу новое расширение. На данный во­прос следует ответить утвердительно. После этого еще раз щелкаем правой кнопкой мыши на измененном файле и выбираем уже команду Изменить. У вас запустится стандартный Блокнот (по умолчанию). Пока он пустой. Вы можете теперь вводить код, приведенный в листинге чуть ниже. Будьте вни­мательны, постарайтесь избежать ошибок.

        Первый сценарий JavaScript

        Листинг 1. Пишем первый сценарий

        Сохраните документ под именем helloworld.htm. Мы пока не будем смотреть написанный сценарий в действии, а получше изучим написанное.

        Разбор полетов

        Для того чтобы добавить сценарий JavaScript на Web-страничку, используется пара тегов <script> </script>. Данная пара дает указание браузеру рассмат­ривать текст программы как сценарий. Исключение составляют только обра­ботчики событий, где использование команды script не требуется. Здесь стоит немного задержаться. На сегодняшний день существует рекомендация исполь­зовать строчку

        Совсем недавно более распространенным вариантом был код

        Обратите внимание, что тег script содержит параметр JavaScript. Этот пара­метр определяет используемый язык сценария. Кроме того, в нем можно ука­зать и номер версии языка.

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

        Существует еще один вариант для ленивых, которые не любят набирать лишние символы на клавиатуре:

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

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

        • сценарий находится между тегами <head> </head> ;
        • сценарий находится в теле программы после тега <body> ;
        • сценарий находится в обработчиках событий. Данный способ позволяет выполнять сценарий JavaScript при наступлении нужного события;
        • сценарий находится в отдельном файле. JavaScript позволяет создавать собственные файлы с расширением js. В этом случае на странице указы­вается местоположение такого файла. В нашем примере этот способ не использовался.

        Таким образом, на одной странице могут располагаться сразу несколько сце­нариев. В какой последовательности браузер будет выполнять эти сценарии? Ничего сложного тут нет. Просто надо запомнить несколько правил. Сначала идет анализ сценария в заголовке документа HTML (между тегами <head> </head> ). После идет выполнение сценариев, расположенных в теле документа (между тегами <body> </body> ). А обработчики событий запус­каются при выполнении соответствующих событий. Например, обработчик кнопки onCiick выполняется после нажатия кнопки. Взглянем на пример еще раз. Первый сценарий находится в заголовке документа:

        Скрытие сценария JavaScript

        У первых браузеров, предназначенных для просмотра Web-страничек, не было возможности использования сценариев. Тег <script> был добавлен в спецификацию HTML чуть позднее. Поэтому старые браузеры не выпол­няют сценарии JavaScript и просто выводят текст вашего сценария на стра­нице. Внешний вид такой странички будет выглядеть не совсем так, как вы задумали.

        Чтобы избежать подобных проблем, рекомендуется использовать скрытие сценария, для чего следует обрамлять код сценария тегами комментариев. Они дают указание старым браузерам игнорировать программу сценария. Комментарии в HTML начинаются с дескриптора <!-- и заканчиваются де­скриптором -- > :

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

        Комментарии в JavaScript

        Как и во многих языках программирования, существует возможность созда­ния комментариев и для JavaScript. Они не выводятся на экран пользователя, но позволяют включить в код сценария необходимую документацию. Если вы напишете очень сложный код, то по прошествии длительного времени можете просто забыть, что он делает. Кроме того, комментарии помогут дру­гому разработчику разобраться в вашем сценарии (если вы в этом заинтере­сованы).

        Чтобы включить комментарий в сценарий JavaScript, начните строку с двух символов косой черты (слэш):

        Также можно включить комментарий после строчки кода:

        Если вам понадобится закомментировать сразу несколько строк, то оставлять в начале каждой строки две наклонные косые черты может оказаться утоми­тельным занятием. В этом случае используют комментарии, начинающиеся с /* и заканчивающиеся */ , что гораздо удобнее. Данный способ демонстриру­ется в приведенном ниже примере:

        Все, что находится между знаками комментариев, игнорируется браузером и не выполняется. Не забывайте, что комментарии JavaScript используются только в самом сценарии между тегами <script> . Их нельзя вводить в про­граммном коде HTML.

        Проблемы

        Диалоговое окно Панель информации Internet Explorer

        Рис. 1. Диалоговое окно Панель информации

        Вам нужно нажать кнопку OK (если вы хотите, чтобы это окно у вас боль­ше не появлялось, то установите соответствующий флажок). Но и это еще не все. Теперь вам придется щелкнуть по желтой полоске наверху страни­цы (но не на крестике в углу этой полоски!). Появится еще одно окно, где нужно выбрать первый пункт Разрешить заблокированное содержимое. И наконец, в диалоговом окне Предупреждение системы безопасности нажать кнопку Да.

        Сценарий JavaScript в действии

        Читайте также: