Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.018 c
3-82052
Andrey_
2003-09-02 09:03
2003.09.25
Fastreport


1-82318
pvb87@mail.ru
2003-09-12 17:44
2003.09.25
Манипулятор окна


6-82361
aach_ua
2003-07-26 19:41
2003.09.25
Правильно обновлять прогу через инет


1-82325
SomeBody
2003-09-13 17:04
2003.09.25
TOffice97Button


1-82234
Nur
2003-09-10 06:28
2003.09.25
Национальная кодировка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский