Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.25;
Скачать: CL | DM;

Вниз

Запутался с 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.021 c
14-82407
Nikky
2003-09-09 09:44
2003.09.25
Новая волна


1-82300
AndyGee
2003-09-14 14:55
2003.09.25
CreateProcess и перенаправление стандартного ввода-вывода


3-82052
Andrey_
2003-09-02 09:03
2003.09.25
Fastreport


3-82073
Centurion
2003-09-05 14:29
2003.09.25
Ошибка БД


6-82347
Зозуля Юрий
2003-07-29 02:02
2003.09.25
Два вопроса по Интернет: точное время и защита пароля