Форум: "Потрепаться";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
ВнизЗапутался с JavaScript... Может, кто подскажет? Найти похожие ветки
← →
PVOzerski (2003-09-02 16:06) [0]Сейчас приходится делать сайт, так что немножко, по сути дела, впервые, влез в JavaScript и DHTML. Стараюсь, чтобы то, что делаю, корректно отображалось в разных браузерах. Проверяю в IE6, Opera 7.11 и Nn 4.8. И налетел на заковыку. Ниже привожу содержимое HTML-файла. Зачем такое чудо-юдо пишу? - надо :^) На самом деле, это упрощенный вариант - для локализации проблемы, он ее демонстрирует тоже. А суть заковыки такая. Под нетскейпом не работает русская кодировка, текст в листбоксе и кнопке выглядит знаками вопроса (в IE и Опере всё в порядке). Причем если я то, что должно генериться скриптом, вытаскиваю в виде HTML-файла и загружаю его, Нетскейп отображает всё корректно (только мне нужно его всё-таки генерить динамически :^( ). Идеи, как побороть проблему, есть? Вариант "Снести Нетскейп" не предлагать :^). Если увидете и укажете мою явную неграмотность в JavaScript"е и т.п. - не обижусь и не удивлюсь...
<html>
<head>
<script language="JavaScript">
function mk()
{
//document.clear();
document.write("<html>");
document.write("<head>");
document.write("<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">");
document.write("</head>");
document.write("<body bgcolor="#FFFFFF" style="font-family: Times New Roman Cyr; font-size: 10pt; charset=windows-1251; color: #000000" link="#FFFFFF" vlink="#FFFFFF" alink="#FFFFFF">");
document.write("<form name="ecoform">");
document.write("<select multiple name="ecolist" size=60>");
document.write("<option value="DUMMY">"+"????"+"</option>");
document.write("</select>");
document.write("<input type="button" value="?ёъы?ўшЄ№!" onclick="SendClick()">");
document.write("</form>");
document.write("</body>");
document.write("</html>");
document.close();
}
</script>
</head>
<body onload="mk()">
</body>
</html>
← →
Yakudza (2003-09-02 16:14) [1]А какой Нескейп ?
← →
PVOzerski (2003-09-02 16:17) [2]2Yakudza © (02.09.03 16:14) [1]:
4.8 Английский интерфейс, Win32.
← →
PVOzerski (2003-09-02 16:28) [3]Кстати, я тут при отправлении исходного поста ляпнулся: не перевел из DOS в WIN, а набирал в FAR"е (притом набирал-то правильно, в WIN, это я потом, для копирования, открыл и не переключил, так что дело не в несоответствии кодировок) :^)
Правильный вид документа:
<html>
<head>
<script language="JavaScript">
function mk()
{
//document.clear();
document.write("<html>");
document.write("<head>");
document.write("<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">");
document.write("</head>");
document.write("<body bgcolor="#FFFFFF" style="font-family: Times New Roman Cyr; font-size: 10pt; charset=windows-1251; color: #000000" link="#FFFFFF" vlink="#FFFFFF" alink="#FFFFFF">");
document.write("<form name="ecoform">");
document.write("<select multiple name="ecolist" size=60>");
document.write("<option value="DUMMY">"+"ТЕСТ"+"</option>");
document.write("</select>");
document.write("<input type="button" value="Исключить!" onclick="SendClick()">");
document.write("</form>");
document.write("</body>");
document.write("</html>");
document.close();
}
</script>
</head>
<body onload="mk()">
</body>
</html>
← →
NickBat (2003-09-02 16:30) [4]Попробуй строку
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
прописать в заголовок, а не генерить.
← →
Moscower (2003-09-02 16:33) [5]Возможно это вам поможет:
Изменение содержимого слоя
Запись в слой
MSIE, Mozilla, Opera 7 - .innerHTML=текст
Netscape 4 -
.document.open()
.document.write(текст)
.document.close()
Opera 5, 6 - невозможно
Из-за проблем с MSIE 4 не следует вызывать .innerHTML до наступления onload страницы.
В Netscape 4 есть глюк с записью русских букв в слой. Они превращаются либо в символы кодировки western, либо в знаки вопроса ("?????"). Решение этой проблемы может быть достигнуто через использование загрузки в слой другого документа (см. далее). В слой загружается документ с корректно выставленным charset, а потом в него печатается через document.write нужный текст.
Подгрузка другого документа в слой
В Netscape 4 слои имеют атрибут и свойство src, а также метод .load(url). Это позволяет записывать в слой содержимое любого документа.
В MSIE, Mozilla и Opera вместо этого есть тег <iframe>, который позволяет достичь похожих результатов. Однако целью данной статьи не является подробное рассмотрение этого решения. Скажу лишь, что этот <iframe> делается невидимым с помощью CSS, в него подгружается искомый документ и, после его загрузки, содержимое <iframe> записывается в нужный слой через .innerHTML.
В Opera 5, 6 будут проблемы, т. к. в ней нельзя ни загружать ничего в слой, ни писать в него.
Динамическое создание слоев через document.write в Netscape 4
В Netscape 4 будет ошибкой создавать слои (или просто теги со стилевым атрибутом style) таким образом:
document.write("<div id="ddd" style="position: absolute">...</div>")
Почему-то Netscape 4 не переваривает указание стиля для печатаемого через document.write тега. Рекомендуется вынести стили во внешний отдельный тег <style>:
document.write("<style> #ddd { position: absolute } </style>")
document.write("<div id="ddd">...</div>")
Также можно воспользоваться указанием на class, а не id тега.
← →
Moscower (2003-09-02 16:34) [6]Полная версия лучшего пособия по Кроссброузерному HTML :
http://www.kruglov.ru/articles/crossbrowserdhtml/
Очень хороший форум по данному вопросу, где всегда профессионально помогут:
http://www.xpoint.ru
← →
ZeroDivide (2003-09-02 16:35) [7]:)
Измени тип кодировки в нетскейпе.
Ошибка вероятно здесь: charset=windows-1251. Попробуй в кавычках, может нетскейп проглотит так
document.write("<body bgcolor="#FFFFFF" style="font-family: Times New Roman Cyr; font-size: 10pt; charset= "+""windows-1251""+"; color: #000000" link="#FFFFFF" vlink="#FFFFFF" alink="#FFFFFF">");
← →
PVOzerski (2003-09-02 16:37) [8]2NickBat © (02.09.03 16:30) [4]:
Не помогает :^( И если динамическую генерацию убираю, и если обе оставляю.
← →
NickBat (2003-09-02 16:46) [9]PVOzerski © (02.09.03 16:37) [8]
Не помогает :^( И если динамическую генерацию убираю, и если обе оставляю.
Попробуй оставить только одну, чтобы файл выглядел так:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<script language="JavaScript">
function mk()
{
document.write("<body bgcolor="#FFFFFF" style="font-family: Times New Roman Cyr; font-size: 10pt; charset=windows-1251; color: #000000" link="#FFFFFF" vlink="#FFFFFF" alink="#FFFFFF">");
и т.д.
← →
PVOzerski (2003-09-04 13:35) [10]Возвращаюсь к проблеме.
Похоже, Moscower © (02.09.03 16:33) [5] правильно указал источник проблемы. Только вот предлагаемое в цитируемом им тексте у меня проблемы не решает: да, загрузка в layer из файла происходит в нужной кодировке, но как только я начинаю динамически писать в документ из JavaScript (.open();write()...), всё предыдущее затирается и опять начинают выводиться знаки вопроса. Думаю о двух возможных путях решения (заодно опять демонстрирую свою безграмотность :^) ): 1) А нет ли средств предотвратить затирание (есть же, скажем, в том же Паскале rewrite, а есть append); 2) А нельзя ли генерить HTML не из JavaScript, а из Java? Если у кого есть идеи, ссылки, примерчики - буду признателен.
← →
PVOzerski (2003-09-04 14:31) [11]up
← →
Dionys (2003-09-05 03:16) [12]попробуй в NN поставить кодировку (encoding) WIN-1251 и сделать её кодировкой по умолчанию (Set default)... а вообще ориентируйся на NN7... IE6, O7.11 и NN4.8 - не сравнимы между собой... последний морально устарел еще в прошлом веке...
← →
Fantasist (2003-09-05 06:12) [13]
> А нельзя ли генерить HTML не из JavaScript, а из Java?
Не уверен, что понял, что имеется в виду, но если то, что я думаю, то да. Есть JSP - Java Server Pages, серверный язык по-типу ASP. Вообще-то обычно HTML страницы как-раз таки и генерятся на серверной стороне с помощью серверных языков. Ну, естественно, что нужен будет web server поддерживающий соответсвующий язык.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.012 c