LINUX.ORG.RU

К чему морду писать-то?

И что, руками нонче некошерно?

// кстати, сама морда пишется довольно быстро, значительно больше времени на всякие украшательства и удобства тратится.

// да, могу поделиться скриптиками контекстной справки и еще всякой фигни. Хотя, ИМХО, вы и сами это за полчаса-час напишете...

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от dizza

Пальчик нужен для пущего веселья? :)

Siado ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

К чему угодно, хочется найти какую-нить пошаговую статью по этому поводу. Что-то гуглится слабо.

Siado ★★★★★
() автор топика
Ответ на: комментарий от Siado

К чему «морду»-то делать? И вообще, сомневаюсь, что будет такая пошаговая инструкция создания «сферической веб-морды в вакууме».

Всего-то вам нужно обеспечить взаимодействие клиента и сервера и нарисовать более-менее приличную клиентскую сторону.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

Тогда уж так:

hello.cgi:
#!/bin/sh
echo -e "Content-type: text/html\n\nHello world!"

hello.html:
<html>
<head>
<script>
function sendrequest(URL){
	request = new XMLHttpRequest();
	request.open("POST", URL, true);
	request.onreadystatechange=function(){
		if (request.readyState == 4){
			if (request.status == 200){
				onOK();
			}
			else alert("bad");
		}
	}
	request.send("");
}
function onOK(){
	document.getElementById("container").innerHTML = request.responseText;
}
function gethello(){
	sendrequest("cgi-bin/hello.cgi");
</script>
</head>
<body onload="gethello();">
<div id="container"></div>
</body>
</html>

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

1. onreadystatechange — надо заменить на addeventlistenter

2. _глобальные_ функции (sendrequest,onOK,gethello) не нужны...
все эти функции должно быть декларированы внутри _локальной_ области (function() { ... })()

user_id_68054 ★★★★★
()
Ответ на: комментарий от Eddy_Em

>К чему «морду»-то делать?

Ну вот например возьмем zenity, простая консольная программка и к ней вебморду, чтобы можно было удаленно подключатсья и через вебморду посылать разные команды к ней, типа zenity --warning --title «dsfdf» --text «gggg»

Siado ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

> 1. И так работает :)

ладно, пускай.. legacy-хлам долгое время ещё может никому не мешать :-)

> 2. В данном примере это лишнее

а вот тут можно сделать следущий эксперимент:

<script>
function test(){
    alert('привет!')
}

window.test() // угадай -- что случится? :-)
</script>

вобщем — любая глобальная фунекция становится членом объекта window ...
а у него и так уже дохрена их :-) .. вобщем вероятность коллизии всё всёше и выше чем больше понатыкано,

неговоря уже о том что оформлять код следующим образом — совсем НЕ СЛОЖНО :).

<script>
(function() {
    'use strict'
    
    function test(){
        alert('привет!')
    }
    
    test() // OK
    //window.test() // error
}) ()
</script>

user_id_68054 ★★★★★
()
Ответ на: комментарий от Siado

zenity??? oO И кому эти мессаги должны показываться, после того как вы ими начнете управлять через вебморду?

boombick ★★★★★
()
Ответ на: комментарий от Eddy_Em

> А как эти функции из объектов вызывать (типа onclick, onload и т.п.)?

а onclick, onload, ... — (наверно всё начинающееся на «on...») — тоже legacy-хлам :-D

нужно из кода это делать:

var elem = document.getElementById('моя_любимая_кнопочка')
if(elem) {
   elem.addEventListener('click', my_favorid_button_handle, false)
}

и вооще не нужно в HTML-разметке писать javascript-вставки :-) .. не кошерно это :-)

(через jQuery конешно код короче былбы..)

user_id_68054 ★★★★★
()
Ответ на: комментарий от user_id_68054

и вооще не нужно в HTML-разметке писать javascript-вставки :-) .. не кошерно это :-)

Эдаким способом кода будет в 10 раз больше, чем надо.

Лучше уж по-старинке, всякие on-функции в элементах прописывать (если они не создаются динамически).

А вот если элемент создан динамически - да, проще написать element.onclick = ...

// кстати, нафига эти addEventListener, если есть on-... свойства объектов?

через jQuery конешно код короче былбы..

Фигушки, через него как раз длиннее - сколько сам jQuery занимает?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Дык яж как раз и хочу по шагам разузнать как цеплять морды к простым консольным приложениям =) Имхо это как бы и будет универсальной мордой.

Siado ★★★★★
() автор топика
Ответ на: комментарий от Siado

ОК. Вот наипростейший CGI, который конвертирует запросы от клиента в строчки параметр=значение:

cat convert 
#!/bin/sh
#Converts Data sent by method Post or Get
# into stdout like param1 name1 param2 name2 etc.
if [ "$REQUEST_METHOD" = "POST" ] ; then
    QUERY_STRING=`sed "s/\\\`/_/g"`
fi
line=`echo $QUERY_STRING|sed 's/&/ /g'`
for pair in $line
do
    name=`echo $pair|sed 's/=/ /g'|awk '{print $1}'`
    type=`echo $pair|sed 's/=/ /g'|awk '{print $2}'|sed -e 's/%\(\)/\\\x/g'|sed 's/+/ /g'`
    printf "${name}=\"${type}\"\n"
done
Если мы в другом CGI скажем eval `./convert`, то «параметры» превратятся в переменные баша со «значениями». Параметры можно предварительно проверить, чтобы всяких переполнений стека не было или еще каких покушений. А потом уже можно что угодно запускать, передавая эти параметры.

Например, скриптик:

#!/bin/sh
echo -e "Content-type: text/html\n\n<html>
<meta http-equiv='Content-Type' content='text/html; charset=koi8-r'>
<link rel='stylesheet' href='/style.css' type='text/css'>"
eval `./convert`
${proc} ${params}
echo "</body>"</html>
Посылая этому скрипту запрос «proc=rm&params=-rf+/», мы вызовем на сервере команду rm -rf / от имени пользователя apache =)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Siado

>> по шагам разузнать как цеплять морды к простым консольным приложениям

Шаг 1. прочитай для начала про RPC, а вебморда это просто отображалка которая пишется в последнюю очередь

shrub ★★★★★
()
Ответ на: комментарий от Eddy_Em

> Фигушки, через него как раз длиннее - сколько сам jQuery занимает?

ну как сколько? понятное дело — одну строчку :-D

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.js"></script>

> Эдаким способом кода будет в 10 раз больше, чем надо.

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

сам HelloWord — конешно короче выглядет через on<...>-конструкции

> А вот если элемент создан динамически - да, проще написать element.onclick = ...

прощще — да, но правильнее опятьтаки — через element.addEventListener('click', ... , false)

>// кстати, нафига эти addEventListener, если есть on-... свойства объектов?

ну потомучто в W3C-документах рекомендуется — addEventListener :-) . ведь on<...>-конструкции появились ещё на заре отсутствия стандартов!

а ещё — когда делаешь через addEventListener — чуствуешь себя труъ и повышается чсв :-D

user_id_68054 ★★★★★
()
Ответ на: комментарий от Siado

а ещё наверно можно загнаться с dBus :-) ... и «выполнять» более-привелегированные dBus-функции чем привелегии-пользователя-apache

user_id_68054 ★★★★★
()
Ответ на: комментарий от user_id_68054

ну как сколько? понятное дело — одну строчку :-D

=)

Я думаю, вы все-таки поняли, о чем я.

а ещё — когда делаешь через addEventListener — чуствуешь себя труъ и повышается чсв :-D

Это точно :)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от user_id_68054

Ага, и в итоге мой примерчик с rm -rf / запустится от рута =)

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.