Полезная информация

Mozilla Россия — свежие версии программ Mozilla, а также масса полезной информации по каждому продукту.

№106-06-2006 13:51:34

hasherfrog
Участник
 
Группа: Members
Зарегистрирован: 17-06-2005
Сообщений: 60

Как изменить кодировку новосозданного документа

Вопрос достаточно сложный.
WINDOWS XP, Firefox 1.5.0.4

По умолчанию, кодировка страницы, созданной через javascript - UTF-8.
Как выглядит "создание":

Выделить код

Код:

javascript:
(function(){
  nW = window.open('','test','width=200,height=200');
  nD=nW.document;
  nD.open();
  nD.writeln('<?xml version="1.0" encoding="windows-1251"?>');
  nD.writeln('<html><head><title>Test</title><base target=\'_blank\'>');
  nD.writeln('<meta http-equiv="content-type" content="text/html; charset=windows-1251">');
  nD.writeln('</head><script></script><body>');
  nD.writeln('<p>ТЕКСТ</p>');
  nD.writeln('</body></html>');
  nD.close();
  nW.focus();
  /*nW.close();*/
}
)()

Когда документ создан, всё вроде бы нормально. Но если его теперь сохранить... Получим кракозябли.
Тоже самое будет, если созданный документ имеет POST-форму - передаваемый текст будет искорёжен.

Если у созданного документ посмотреть кодировку - увидим... UTF-8.
А по идее, должны иметь WIN1251.

Если бы вопрос стоял о сохранении документа, я бы сменил кодировку в тексте "charset="
Если бы форма была метода GET, я переконвертировал бы текст UTF8 -> WIN1251.
Но у меня затык именно с формой POST.  :[

Задача такая: нужно явным образом указать нужную кодировку у созданного через javascript документа.

Есть какие-нибудь мысли по поводу?

Отсутствует

 

№206-06-2006 15:44:15

ladserg
Обещал вернуться...
 
Группа: Members
Откуда: Russia
Зарегистрирован: 10-03-2005
Сообщений: 1977

Re: Как изменить кодировку новосозданного документа

Может есть смысл генерит документ с помощью PHP?

Есть ли возможность на странице со скриптом поставить кодировку CP1251?


Этот мир, не совершенный, состоит из всех из нас. Он прямое отражение наших чувств и наших глаз.
Этот мир не станет лучше и не станет он добрее, если сами мы добрее не станем.
(@ Игорь Тальков, Этот мир).

Отсутствует

 

№307-06-2006 00:55:41

Unghost
Призрак-админ
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 08-10-2004
Сообщений: 11771

Re: Как изменить кодировку новосозданного документа

==> Разработка


Do not meddle in the affairs of Wizards, for they are subtle and quick to anger.

Отсутствует

 

№407-06-2006 07:49:37

Mash
Участник
 
Группа: Extensions
Зарегистрирован: 09-04-2005
Сообщений: 620
Веб-сайт

Re: Как изменить кодировку новосозданного документа

Если интересует только лишь POST, то попробуйте поиграть атрибутом формы "accept-charset": http://www.w3.org/TR/html401/interact/forms.html#edef-FORM
Должно помочь.

В противном случае для Fx можно пойти другим путём:

Выделить код

Код:

<script>
function show() {
  var doc = 'data:text/html;charset=windows-1251,<html><head><title>Test</title><base target="_blank"></head><script><'+'/script><body><p>ТЕКСТ</p></body></html>';
  var nW = window.open(doc,'test','width=200,height=200');
  nW.focus();
  return false;
}
</script>
<body><a onclick="return show()">click me</a></body>

Подробнее здесь: http://en.wikipedia.org/wiki/Data:_URL

Но проще всего, конечно же, отсылать на адрес статичной/динамичной страницы.

Отсутствует

 

№507-06-2006 13:12:49

hasherfrog
Участник
 
Группа: Members
Зарегистрирован: 17-06-2005
Сообщений: 60

Re: Как изменить кодировку новосозданного документа

Mash
Великолепно. Спасибо огромное!
Правда, появилась другая :dumb: проблема, но я попробую разрулить...

Отсутствует

 

№607-06-2006 13:55:24

hasherfrog
Участник
 
Группа: Members
Зарегистрирован: 17-06-2005
Сообщений: 60

Re: Как изменить кодировку новосозданного документа

Значит, по пунктам, но задом-наперёд:
2) Создание документа через data:text/html;charset=windows-1251 действительно сразу создаёт документ в нужной кодировке. Неприятность (определившая в конце концов мой отказ от данного метода) в следующем: К элементам документа невозможно обратиться. Так получается, что сразу после создания окошка (в котором уже и текст, и всё что нужно) для javascript'а ещё может не существовать собственно элементов документа (а может и существовать, тут как придётся, 50 на 50). Т.е. делая document.forms.length, мы можем получить 0 (а может получить и не 0), хотя формы вроде есть. Тут нужно отметить, что мне нужно было реализовать манипуляцию с данными форм без участия пользователя ("при участии" - вопрос снимается; в тот момент, когда пользователь начнёт что-то делать с формой, она уже точно будет существовать для javascript). Попытки разрулить были такие:
а) поставить задержку; ничего хорошего не получается, потому что тормозится весь процесс, javascript "замораживается" не в одном окне, а во всех.
б) добавить onLoad в body создаваемого окна - не удобно, плюс (что важно), нельзя выполнить (например) submit формы - Firefox реагирует окошками "запрещена попытка popup'а ".

1) accept-charset сработал именно как мне было надо. Поскольку окно у меня создаётся временное, никаких сохранений я не планирую, а важно лишь правильно отправить данные, данный метод - то что нужно.

***

В чём была заморочка? А вот-с :]

Выделить код

Код:

javascript:(function(){var x=prompt('Search for','');if(x!=null){var doc='<html><head><title>Test</title><base target="_blank">';doc+='</head><script><'+'/script><body>';doc+='<form action="http://dic.academic.ru/searchall.php" method="post" name="searchform" accept-charset="windows-1251">';var chks=new Array("dic[lower]","dic[ushakov]","dic[enc1p]","dic[enc2p]","dic[enc3p]","dic[ogegova]","dic[brokgauz]","dic[muller]","dic[idioms]","dic[fin_enc]","dic[econ_dict]","dic[efin_dic]","dic[fin2]","dic[anticris]","dic[geolog]","dic[hist_dic]","dic[biograf]","onlythermin");for(var i=0;i<chks.length;i++){doc+='<input name="';doc+=chks[i];doc+='" checked="checked" type="checkbox">';}doc+='<input name="thermin" type="text" value="';doc+=x;doc+='">';doc+='<input name="sss" type="submit">';doc+='</body></html>';var nW=window.open('','hash','width=200,height=100');var nD=nW.document;nD.open('text/html');nD.writeln(doc);nD.close();nW.focus();nD.searchform.submit();nW.close();}})()

Данный букмарклет ищет нужное слово в словарях и онлайн-энциклопедиях на dic.academic.ru.
Главное другое - теперь есть реализация работы с отправкой POST'ом русского windows-текста.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]