Страницы: 1
Вопрос достаточно сложный.
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 документа.
Есть какие-нибудь мысли по поводу?
Отсутствует
Может есть смысл генерит документ с помощью PHP?
Есть ли возможность на странице со скриптом поставить кодировку CP1251?
Этот мир, не совершенный, состоит из всех из нас. Он прямое отражение наших чувств и наших глаз.
Этот мир не станет лучше и не станет он добрее, если сами мы добрее не станем.
(@ Игорь Тальков, Этот мир).
Отсутствует
Если интересует только лишь 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
Но проще всего, конечно же, отсылать на адрес статичной/динамичной страницы.
Отсутствует
Mash
Великолепно. Спасибо огромное!
Правда, появилась другая проблема, но я попробую разрулить...
Отсутствует
Значит, по пунктам, но задом-наперёд:
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-текста.
Отсутствует
Страницы: 1