#1WebmastersDigest: новости и обзоры для тружеников Сети.
Выпуск §7
JavaScript +CGI вместо SSI
SSI является единственным нормальным способом вставки
внешнего HTML-кода внутрь страницы. К сожалению,
не на всех хостингах разрешено использование SSI,
что связывает руки многим веб-мастерам.
Здесь я хочу предложить компромиссный вариант, а
именно: вместо SSI использовать JavaScript.
Сразу скажу, что так красиво, как с SSI, не получится,
но, как говорится, "на безрыбье...".
Сразу скажу, что идею придумал не я: почерпнул я ее
у сайтов, предлагающих другим сайтам вставить
свой блок новостей.
Итак, идея основана на том, что в HTML-страницу нельзя
вставить (на уровне клиента) внешний HTML-блок (что,
по-моему - большой недостаток стандарта HTML), но
можно вставить внешний JavaScript.
При обработке этих строчек клиент должен загрузить файл
js.js, отработать его как скрипт и вставить результат
в выводимый документ.
Как это не печально, в файле js.js не может быть просто фрагмент
HTML-кода, а должен быть именно скрипт, выводящий этот
фрагмент. Скрипт довольно простой, но некоторые "заморочки"
все-таки есть.
Итак, JavaScript-код, выводящий HTML, довольно простой, и
выглядит как:
document.write ('строка_HTML-кода\n');
document.write ('строка_HTML-кода\n');
и т.д.
Можно, конечно, написать и так:
document.write ('строка_HTML-кодаn строка_HTML-кода\n...');
это меньше по объему, но, во-первых, не так красиво, во-вторых,
строчка получается длинной, неудобной для редактирования.
Вышеуказанная заморочка заключается в том, что не все символы
HTML-кода можно передавать "как есть". Так, символ апострофа
будет воспринят как конец строки и вызовет ошибку.
Кавычки также вызовут ошибку. Поэтому зарезервированные
символы должны ставиться после обратного слэша - прямо как в PERL :)
Так, HTML-строка
<INPUT type="submit">
будет выглядеть в JavaScript-варианте как:
document.write ('<INPUT type=\"submit\">\n');
Если у Вас есть возможность запускать CGI-скрипты, этот процесс
можно автоматизировать, используя специальный скрипт, "готовящий
на лету" подобные JavaScript-ы из обычных вставляемых файлов.
Вариант такого скрипта в моем исполнении Вы можете найти здесь:
Можете, конечно, и вручную составить JavaScript-фрагменты...
В таком случае на вашем сервере может вообще не быть какого бы
то ни было скриптинга - ни CGI, ни SSI, и этот метод будет
работать.
Теперь о недостатках.
А они, надо сказать, существенные...
В самом начале я говорил о том, что этот подход - далеко не SSI.
И вот почему. Главное отличие в том, что:
1. SSI обрабатывается на сервере. Для пользователей и поисковых
машин, обращающихся к Вашему сайту по HTTP, нет никакой разницы,
сделана ли эта страница на SSI или это просто "сплошной" HTML-код -
к ним попадет уже готовая страница: сервер соберет ее из фрагментов
и скажет, что так оно и было :)
2. JavaScript загружается браузером и исполняется им же. Этот механизм работает на
уровне клиента, а значит, не надежен. Если у посетителя отключен
JavaScript, то он просто не увидит этого "инклюда".
Поисковые машины также не будут исполнять этот скрипт и индексировать
его результат (собственно, это можно обратить и во благо...).
Кроме того, если пользователь сохранит страницу на диск, не
сохранив JavaScript, он в дальнейшем также не увидит этого "инклюда".
Слава Богу, что в недостатки нельзя отнести различия
JavaScript-объектных моделей NN и IE - благо скрипт очень уж простой :)
Остается утешать себя одним достоинством этого метода: таким образом
можно вставлять документы не только со своего сервера, но и с любых
других, как это и делают с теми же новостями.