Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JavaScript и Perl, как JavaScript записать в Perl 
:(
    Опции темы
nitr
Дата 16.4.2006, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



А я чуток оффтопа... это где перл преподают 8) ?
Добавлено @ 00:04
Lapochka, какой у тебя браузер? Какую ошибку выдаёт скрипт (если выдаёт)?


--------------------
PM   Вверх
korob2001
Дата 16.4.2006, 04:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Цитата

мда.. наши преподы мудаки!!! нафиг тогда требовать чтобы в перловском файле работал JS

Я не знаю, кто у вас там преподы, хотя скорее всего они тут вообще не причём.
Цитата

смари. я работаю вот в dreamweaver.. и я там предположим создаю файл JS где описываю все мне необходимые функции.. а как его вызывать эти функции? я просто раньше так никогда не делала.. я с этим работаю тока месяц всего лишь! 

1. Создавай js файл.
2. Пиши в него код JavaScript.
3. Сохрани всё это дело.
4. Когда нужно будет подключить файл js, в теге <script> указывай атрибут src, где и указывай путь к твоему файлу js.
Например:
Файл main.js
Код

// Функция запрашивает имя клиента и выводит приветствие
function personalHello() {
        while (true) {
               var name = window.prompt("Как вас зовут?","") || "";
               if (name != "") {
                   window.alert("Привет, " + name + "!");
                   break;
               }
        }
}

Файл home.html
Код

<html>
    <head>
       <title>Test use js file</title>
       <script language="JavaScript" type="text/javascript" src="main.js"></script>
    </head>
    <body onload="personalHello()">
      <!--// Тело документа //-->
    </body>
</html>

Ложишь оба файла в один каталог и запускаешь файл home.html
Теперь Perl'у достаточно знать путь к js файлу и сгенерировать тэг <script></script>, вместо того, что бы генерировать и сам JavaScript, непосредственно в тело генерируемого документа.

ЗЫ: Мой тебе совет:
До тех пор пока ты не будешь отдавать себе полного отёта в том, что ты делаешь, ПОЛОЖИ ПОДАЛЬШЕ СВОЙ Dreamweaver, а потом ты и сама не захочешь им пользоваться.  smile Я например, до сих пор пишу HTML, CSS, JavaScript только в блокноте. Я не говорю, что тебе нужно делать то же самое, просто найди себе редактор с подсветкой синтаксиса этих языков и который не будет за тебя генерировать код.
Но это так, совет. Ты можешь его послушать, а можешь и просто пропустить мимо ушей. ;)))))) 


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
shootnix
Дата 16.4.2006, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 3.9.2005
Где: Казахстан

Репутация: нет
Всего: 2



Мдя, насчёт вставки JavaScript есть масса способов. Вот, к примеру, такой (здесь не обсуждалси):

Код

use CGI qw/:standard/;
use strict;

$JS = q~function hello() {
                  alert('Hello, Java'); //  хе-хе-хе
              }~;
print  header (-type  => 'text/html; charset=koi8-r'),
         start_html (-title  => 'Hello!',   
                            -script => $JS);
 
PM WWW ICQ   Вверх
Paranoiamoto
Дата 16.4.2006, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.4.2006
Где: Москва

Репутация: нет
Всего: нет



nitr, Perl нам преподают в МАИ (Московский Авиационный Университет)smile

Самый простой способ:

Код

#!z:/usr/perl/bin/perl

print "Content-type: text/html\n\n";

print q%
<script language=JavaScript>
var h=(new Date()).getHours();
if (h > 23 || h < 7) document.write("<strong>Доброй НОЧИ!</strong>!");
if (h > 6 && h < 12) document.write("<strong>Доброе УТРО!</strong>!");
if (h > 11 && h < 19) document.write("<strong>Добрый ДЕНЬ!</strong>");
if (h > 18 && h < 24) document.write("<strong>Добрый ВЕЧЕР!</strong>");
</script>
%;


Лапочка,  Вместо qq||; пишем q%%; и все работает!;)

Perl может натыкаться на знакомые ему |, например, в коде Java....поэтому у тебя и появляются ошибки.
Поставь себе что-нибудь типа GridinSoft Notepad - там все замечательно видно! 

smile)Perl делает то, что ты написала, а не то, что имеешь ввиду;)) smile 
 
PM MAIL ICQ   Вверх
nitr
Дата 16.4.2006, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



поправим код smile и в дальнейшем используем << smile как писал korob2001
Код

#!perl
print "Content-type: text/html\n\n";
print <<END_JS;
<script language=JavaScript>
var h=(new Date()).getHours();
if (h > 23 || h < 7) document.write("<strong>Доброй НОЧИ!</strong>!");
if (h > 6 && h < 12) document.write("<strong>Доброе УТРО!</strong>!");
if (h > 11 && h < 19) document.write("<strong>Добрый ДЕНЬ!</strong>");
if (h > 18 && h < 24) document.write("<strong>Добрый ВЕЧЕР!</strong>");
</script>
END_JS


т.к. ты можешь использовать проценты в коде ява-скрипта smile и получишь "фиг" от перла ;)

А выше писали!
Никто конечно не заставляет... но всё же лучше хранить хтмл-код отдельно от перл-кода smile Так даже легче менять свой дизайн к примеру ;) 


--------------------
PM   Вверх
BlackLFL
Дата 16.4.2006, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 15.9.2005
Где: Москва

Репутация: 3
Всего: 12



Цитата(nitr @  16.4.2006,  20:24 Найти цитируемый пост)
поправим код  и в дальнейшем используем <<  как писал korob2001

невсегда приемлимо, т.к. нельзя пользоваться табуляцией

Код

&html;
sub html {
    print <<END_JS;
    <script language=JavaScript>
    var h=(new Date()).getHours();
    if (h > 23 || h < 7) document.write("<strong>Доброй НОЧИ!</strong>!");
    if (h > 6 && h < 12) document.write("<strong>Доброе УТРО!</strong>!");
    if (h > 11 && h < 19) document.write("<strong>Добрый ДЕНЬ!</strong>");
    if (h > 18 && h < 24) document.write("<strong>Добрый ВЕЧЕР!</strong>");
    </script>
    END_JS
}

выдаст ошибку Can't find string terminator "END_JS" anywhere before EOF ...   

Это сообщение отредактировал(а) BlackLFL - 16.4.2006, 20:42
PM WWW   Вверх
nitr
Дата 16.4.2006, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



BlackLFL, не в этом ошибка smile)
Это уже не по теме обсуждение, тем более я указал, что лучше в файлах хранить, а вот с "%" согласись smile
Тем более табуляцию не используют smile в твоём случае smile ... к примеру любой модуль в комплекте с перл тому свидетель ;) 

Это сообщение отредактировал(а) nitr - 16.4.2006, 21:14


--------------------
PM   Вверх
korob2001
Дата 17.4.2006, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Цитата(BlackLFL @  16.4.2006,  17:40 Найти цитируемый пост)
невсегда приемлимо, т.к. нельзя пользоваться табуляцией

Почему нельзя? Если тебе нужно, что бы табуляция была в JavaScript, то достаточно лишь отключить интерполяцию. Например ставить два обратных слеша \\t, тогда Perl пропустит это, а JavaScript будет транслировать это как табуляцию. Можно так же отключить интерполяцию одинарными кавычками в начале, документа ТУТА  smile . Например:
Код
#!/usr/bin/perl -w
use strict;

print "Content-type: text/html\n\n";
print <<'JSCRIPT';
<html>
   <head>
      <title>Test</title>
      <script language="JavaScript" type="text/javascript">
          <!--//
          function showMessage() {
              window.alert("Это первая строка,\tа здесь была табуляция!\nЭто вторая строка.");
          }
          //-->
      </script>
   </head>
   <body onload="showMessage()">
      <center>
           <b>This is a test page</b>
      </center>
   </body>
</html>
JSCRIPT

Здесь табуляцию и перевод строки делает не Perl, а JavaScript.

Если ты имел ввиду то, что "Документ Здесь" должен всегда начинаться с начала строки, то обойти это можно довольно просто, вот тот же код, но "Документ Здесь" начинается с отступом:
Код
print "Content-type: text/html\n\n";
      print <<'      JSCRIPT';
          <html>
                <head>
                    <title>Test</title>
                    <script language="JavaScript" type="text/javascript">
                         <!--//
                           function showMessage() {
                               window.alert("Это первая строка,\tа здесь была табуляция!\nЭто вторая строка.");
                           }
                         //-->
                    </script>
                </head>
                <body onload="showMessage()">
                   <center>
                      <b>This is a test page</b>
                   </center>
                </body>
          </html>
      JSCRIPT

Просто нужно в конце документа поставить такое же кол-во пробелов или табуляций, сколь ты сделал в его начале. Вот здесь:
Код
'      JSCRIPT';

Для "Документа Здесь", применимы все те же правила, что и для строк. Например вот так можно выплнить системную комаду, с использованием "Документа здесь":
Код
#!/usr/bin/perl -w
use strict;
# Здесь я намеренно оставил табуляцию
      print <<`      BAT`;
            dir
      BAT

А вот пример того, как создать воложенные "документы ЗДЕСЬ":
Код
#!/usr/bin/perl -w
use strict;

my $title = "Это просто тестовый заголовок.";

print "Content-type: text/html\n\n";
print <<'      JSCRIPT', <<HTML;
<html>
   <head>
      <title>Test</title>
      <script language="JavaScript" type="text/javascript">
          <!--//
          function showMessage() {
              window.alert("Это первая строка,\tа здесь была табуляция!\nЭто вторая строка.");
          }
          //-->
      </script>
      JSCRIPT
   </head>
   <body onload="showMessage()">
      <center>
           <b>$title</b>
      </center>
   </body>
</html>
HTML

Заметь, что интерполяция отключена в теле этого "Документа здесь", до тех пор, пока не закончится вложенный документ.
А вот пример того, как заполнить хеш из строк "документа здесь":
Код
#!/usr/bin/perl -w
use strict;

my %hash = <<HASH =~ /\S+\s+/g;
key1 value1
key2 value2
key3 value3
key4 value4
key5 value2
HASH

# Сортируем и выводим содержимое хеша
foreach my $key ( sort { $hash{$a} cmp $hash{$b} || $a cmp $b } keys %hash ) {
        print "$key => $hash{$key}";
}
          

Это сообщение отредактировал(а) korob2001 - 17.4.2006, 09:54


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
BlackLFL
Дата 17.4.2006, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 15.9.2005
Где: Москва

Репутация: 3
Всего: 12



korob2001, спасибо, ты убрал пробел в моих знаниях! ( получай плюс  smile  ) 
PM WWW   Вверх
Nasok
Дата 8.6.2006, 07:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.6.2006

Репутация: нет
Всего: нет



Пардон, у меня тоже вопрос касательно работы Перла и Яваскрипта.

Наверное не совсем сюда, просто незнал куда точно писать.

Суть в следующем, Есть движек на перле ... и соответственно енекоторые функции на яваскрипте ... в своё время он был адаптирован под эксплоер .. и сейчас Мозила (к примеру) его не понимает.

Может есть какие нить советы по опитимизации сайта под мозиллу ...не исключая эксплоера конечно.

Я гвоорил с людьми мне сказали что это с Явой.

Вот обращаюсь к вам.

ЗАранее благодарен.

..а да и ссылка про то, о  чём речь. www.rhhz.ru/cgi-bin/chat/frame.pl - это Чат. Под эксплоером отлично работает ..(под мозиллой не хочет.)

:(
PM MAIL   Вверх
korob2001
Дата 8.6.2006, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Там помоему у тебя проблемы не с JavaScript и Perl, а самой разметкой в правом фрейме. Посмотри исходник HTML, правого фрейма, например вот эта часть кода:
Код

</TABLE></div><div id='news' style="position:absolute; visibility='hidden'"><TABLE>
    <TR>
      <TD><img src="img/m_logo.gif"</TD>
    </TR>
    <TR> 
      <TD>
  <html><head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=Windows-1251"> <title></title> <link rel=stylesheet href="../../album/css/style2.css" type="text/css"> </head> <body bgcolor="#000000" text="#FFFFFF" MARGINHEIGHT=5 TOPMARGIN=5 MARGINWIDTH=5 LEFTMARGIN=5>    
        <table border='0' width='100%' cellPadding='4' cellSpacing='2'>
        <tr><td class='t'><font color='#FFCC00'><b>Полное собрание сочинений !</b></font></td></tr>
        <tr><td class='t'>Дамы и господа. <br>Скоро откроется одна из основных частей RHHZ Comunity. <br> <br><b> <a href="http://people.rhhz.ru" target=_blank>http://people.rhhz.ru</a>  </b> <br> <br>Этот будет большой сайт посвящённый фотографиям наших людей, кол-во фотографий будет ежедневно пополнятся (места много, всем хватит)<br> <br>P.S. - У нас уже имеется огромная коллекция общих фотографий и некоторые люди уже заполняют ими сайт, но если вы считаете что у вас есть то, чего нет у нас и что это непременно должно быть на сайте - пишите - всё будет :)</td></tr>
        <tr><td class='t' align='right'><font color=#c0c0c0>07/11/04</font></td></tr>
        <tr><td class='t' bgcolor='#404040'></td></tr>
        </table>        
          </div></body></html>
</div></body></shtml>

Это последние строки правого фрейма. У тебя начинается ячейка таблицы и в ней же начинается новый документ  smile
Код

</TABLE></div><div id='news' style="position:absolute; visibility='hidden'"><TABLE>
    <TR>
      <TD><img src="img/m_logo.gif"</TD>
    </TR>
    <TR> 
      <TD>
  <html><head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=Windows-1251"> <title></title> <link rel=stylesheet href="../../album/css/style2.css" type="text/css"> </head> <body bgcolor="#000000" text="#FFFFFF" MARGINHEIGHT=5 TOPMARGIN=5 MARGINWIDTH=5 LEFTMARGIN=5>

Что за тэг </shtml>?
Судя по всему SSI включение или просто CGI приложение генерирует не то, что нужно или же не там где нужно. IE просто такие вещи глотает пытаясь сам исправить все твои ошибки, FF этого не делает, точнее делает, но не с таким успехом.  

Это сообщение отредактировал(а) korob2001 - 8.6.2006, 08:12


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Nasok
Дата 8.6.2006, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.6.2006

Репутация: нет
Всего: нет



Спасибо, ну вот с тем что накладывается я разберусь, там просто действительно так сделано что на странице с атрибутом хайден сделано несколько вещей ... 

и просто при нажатии определённой ссылки  (в верхней части Чата) в правом фрэйме включается определённая (спрятанная ранее) информация ... как то список тех кто в чате, какие "тусы" итд ... 

с тем что это накладывается друг на друга .. я разберусь . .я. не совсем понимаю ... почему сам чат не запускается . .под эксплоером ... если видел .. там так же грузится и после загрузки запускается и всё окай .. а тут он даже грузить окно не хочет ...


или у него последовательно ..пока не загрузит правый не будет центральный ? ... помойму врятли. 

Если есть время - посоветуй что нибудь .. могу выслать на емаил или по асе код яваскрипта ... который запускает барабан чата. просто он довольно большой : )

Чат у нас давно существует ... и просто вот только ща я отошёл от работы немного и решил его оптимизировать и под фаир фокс ...итд : )

Заранее благодарен.
PM MAIL   Вверх
afork
Дата 8.6.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Интересный момент ... у тебя js запускает main window .... ?
Если пришлешь скрипт на [email protected] ... погляжу ...  
PM MAIL ICQ   Вверх
Zuzu
Дата 24.10.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 19.10.2006
Где: Екатеринбург

Репутация: 1
Всего: 4



Цитата(korob2001 @  17.4.2006,  10:26 Найти цитируемый пост)
 Можно так же отключить интерполяцию одинарными кавычками в начале, документа ТУТА   . Например:

#!/usr/bin/perl -w
use strict;

print "Content-type: text/html\n\n";
print <<'JSCRIPT';


Браво! Тоже не знал! А как кувыркался в свое время с интерполяцией внутри "документа здесь"...

Кстати, по поводу включения JS в код перл. Достаточно давненько написал программку. Она занималась "скрытием" (заменой на простейший JS) e-mail - адресов в HTML-коде. Естественно, замена e-mail производилась внутри CMS, пользователь набирал в визуальном редакторе "нормальные" адреса, а на страницу они уже выводилдись в "зашифрованном" виде. А чтобы алгоритым (назовем это так!) "шифрования" адреса (с помощью Perl на сервере) и "расшифровки"  (на клиенте JS) совпадали, а вернее, чтобы была возможность безболезненно поменять в дальнейшем, модуль:

1. Смотрел дату своего обновления
2. Сравнивал с датой .js файла
3. Если Perl-модуль более новы, .js файл обновлялся.

Код JS был "вписан" непосредственно в Perl файл.
И при этом использовался вызов из HTML внешнего JS-файла. Так было проще.

Вот так. =)


--------------------
Проводить эксперименты на живом сервере опасно, а на мертвом - бесполезно.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.1222 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.