|
|
|
| пишу систему писем (сообщений) или мини чатов для сайта.
Как мне организовать такую "фишку" пользователь находится на странице диалога, и ждёт ответа, но может сидеть и на дургих страницах. так вот, чтобы хоть както напомнить что он сидит в чате и что ему пришло новое сообщение, хотелось бы выводить звук "пииии" :) Есть ли у кого примеры данного.?
Вроде есть в чатах, но рыться и разбираться долго.
Получается я хочу так: аякс обращается к сприпту с запросом от пользователя (от меня) "нет ли мне новых сообщений?" скрипт даёт ответ. Если ответ положительный то запустить звук и на экране вывести типа алерт что "Вам пришло новое сообщение".
Подскажите от чего отталкиваться если нет примерного варианта | |
|
|
|
|
|
|
|
для: MikeSVB
(21.05.2009 в 04:11)
| | в скрытом фрейме (фрейм имеет ширину 0) check.php - проверка на новое сообщение каждые NN сек (обновляется форма)
<html>
<head>
<META HTTP-EQUIV='Refresh' Content=NN; URL=check.php?sid=<?=$sid?>'></head>
<body>
<?php
...
проверка на новое сообщение
...
если есть, то:
echo "<script>";
echo "<EMBED SRC='1.wav'></EMBED>";
echo "</script>";
?>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: MikeSVB
(21.05.2009 в 04:11)
| | файл index.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Untitled Document</title>
<script type="text/javascript" src="ajax.js"></script>
</head>
<body onload='process()'>
<div id="myDivElement"></div>
</body>
</html>
|
файл live_pk.php:
<?php
header('Content-Type: text/xml');
// 1 - если нужен звонок; 0- если звонок не нужен
print_r ('<?xml version="1.0" encoding="utf-8"?><r><tist>1</tist></r>');
?>
|
файл ajax.js:
// Переменная для хранения ссылки на объект XmlHttpRequest
var xmlHttp1 = createXmlHttpRequestObject1();
// создать экземпляр объекта XMLHttpRequest
function createXmlHttpRequestObject1()
{
// Переменная для хранения ссылки XMLHttpRequest
var xmlHttp1;
// Эта часть кодо должна работать во всех браузерах, кроме IE6 и более старых версиях
try
{
// попытаться создать объект XMLHttpRequest
xmlHttp1 = new XMLHttpRequest();
}
catch(e)
{
// предпологаеться использование IE6 и более старой версии
var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP');
// попробовать все возможные prog id, пока какая ни будь попытка не увенчаеться успехом
for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
{
try
{
// попытаться создать объект XMLHttpRequest
xmlHttp1 = new ActiveXObject(XmlHttpVersions[i]);
}
catch (e) {}
}
}
// Вернуть созданный объект или вывести сообщение об ошибке
if (!xmlHttp1)
alert("Ошибка создания объекта XMLHttpRequest.");
else
return xmlHttp1;
}
// вызываеться для чнения с сервера
function process()
{
// продолжать если xmlHttp не пустая сылка
if (xmlHttp1)
{
// попытаться соедениться с сервером
try
{
// инициировать чтение файла с сервера ...Date.parse(new Date()), true)-защита от кеширования
xmlHttp1.open("GET", "live_pk.php?" + Date.parse(new Date()), true);
xmlHttp1.onreadystatechange = handleRequestStateChange1;
xmlHttp1.send(null);
}
// вывести сообщение об ошибке в случаи не удачи
catch (e)
{
alert("Не возможно соедениться с сервером:\n" + e.toString());
}
}
}
function handleRequestStateChange1()
{
// Если readyState=4, мы можем прочитать ответ с сервера
if (xmlHttp1.readyState == 4)
{
// продолжать если получен статус 200 ок
if (xmlHttp1.status == 200)
{
try
{
// обработать ответ полученный с сервера
handleServerResponse1();
}
catch(e)
{
window.setTimeout(function() {top.location.reload(); return true;}, 30000);
}
}
else
{
window.setTimeout(function() {top.location.reload(); return true;}, 30000);
}
}
}
// Обработать ответ, полученный с сервера
function handleServerResponse1()
{
// прочитать ответ, полученный с сервера
var xmlResponse1 = xmlHttp1.responseXML;
// получить ссылку на корневой элемент XML's
xmlRoot1 = xmlResponse1.documentElement;
// получить ссылки на массивы с названием и tist
tistArray = xmlRoot1.getElementsByTagName("tist");
// сгенерировать HTML-код
var html = "";
// создать HTML-структуру
for (var i=0; i<tistArray.length; i++)
{
html = tistArray.item(i).firstChild.data;
if (html==1)
{
//звонок
var rqsound = "<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0' WIDTH='1' HEIGHT='1'><param name='movie' value='sound/s1.swf'><param name='quality' value='high'><param name='wmode' value='transparent'><embed src='sound/s1.swf' quality='high' pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash' width='1' height='1'></embed></object>";
// получить ссылку на элемент <div>
myDiv = document.getElementById("myDivElement");
// вывести полученный HTML-код
myDiv.innerHTML = html;
alert("Вам пришло новое сообщение");
}
else
{
//повторить всё заново через минуту
setTimeout('process()', 60000);
}
}
}
|
| |
|
|
|
|
|
|
|
для: VITtek
(22.05.2009 в 15:59)
| | ещё не пробовал, но спасибо. позже отпишусь | |
|
|
|
|
|
|
|
для: MikeSVB
(23.05.2009 в 02:45)
| | огромное спасибо! всё работает! звук правда ещё не проверял. | |
|
|
|
|
|
|
|
для: MikeSVB
(28.05.2009 в 07:10)
| | у меня там маленькая ошибочка
вместо:
надо:
myDiv.innerHTML = rqsound;
|
| |
|
|
|
|
|
|
|
для: VITtek
(28.05.2009 в 08:23)
| | спасибо! учту | |
|
|
|