16. november 2006 - 09:07Der er
33 kommentarer og 2 løsninger
Ny post funktion.
Jeg er lidt i tvivl om hvilken kategori dette spørgsmål skal stilles da det både indeholder ASP og Javascript, men here goes nothing.
Jeg sidder og skal lave en funktion der kan underette en bruger om at han/hun har fået post på websitet mens de er online.
Det første jeg tænkte var et stykke javascript der refresher en side hvert 5. minut som så udfører en sql forspørgsel (ud fra brugerens unikke id som ligger i en session) om der er kommet ny post. Det har jeg så lavet.
Men jeg skal jo også have skubbet en besked frem til brugeren, en popup eller noget der så gør brugeren opmærksom på at han/hun har modtaget ny post. Jeg har lavet scriptet i en seperat fil, som brugeren aldrig kommer direkte ind på, da jeg ikke vil have at deres side bliver refreshed hvert 5. minut - det skal ske i baggrunden uden at de ligger mærke til det - pludselig skal den popup bare være der hvis der er ny post (også selvom de ikke bevæger sig rundt på sitet)
Jeg tænker en usynelig iframe på bruger siden der så kører det script der refresher hvert 5. minut, men så kommer der jo stadig en klik lyd osv - gør der ikke ?
Hmm, synes det er svært at forklare hehe.
Men kort og kort er vel: Selvom en bruger ikke bevæger sig rundt på siden skal han/hun underrettes om ny post vha en popup. Jeg tænker ikke en javascript popup men mere en DHTML popup, du ved, en popup på selve websitet som popup blockere ikke kan blokere.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
som allerede foreslået i det andet spørgsmål vil jeg også slå et slag for ajax. Meget kort sagt går det ud på at du har et stykke javascript som du kan sætte til - usynligt og uden kliklyde - at spørge en anden side om et bestemt resultat, og er der et resultat (i dit tilfælde en besked), kan du fx lave et popup-vindue eller hvad end du ønsker. se eksempelvis http://vertikal.dk/ajax/
ja, jeg har hørt meget godt om Ajax, og har også set hvad det kan. Det er også noget jeg vil sætte mig ind i og lære - når tiden endelig er til det.
Det jeg godt kunne bruge var et lille eksempel på hvordan man kan udføre det jeg har behov for. Blot noget simpelt som jeg så selv kan videre bygge på.
Ja der er jo godt nok nogle gode eksempler på hvordan man kan lave nogle scripts via ajax. Men jeg har simpelthen ikke tiden til at lære det desværre. Men skal nok komme igang.
Det jeg håbede på herinde var et lille kort eksempel på hvordan mit problem kan løses. Jeg har lavet en side der refresher hvert 5. minut og som tjekker om der er kommet ny post. Det jeg mangler er at på en eller anden måde inkludere det script på brugersiden så man kan informere brugeren om at han/hun har fået post.
Men hvis jeg inkluderer den på side refresher hele side jo, med klik lyd og det hele - og det er det jeg gerne vil udenom. Alle tjek skal ske i baggrunden uden brugere ved noget om det.
Det virker, hvis sql forspørgslen er true vises en popup med at der er ny post. Det eneste jeg bare mangler er hvordan jeg kan inkludere dette script på brugersiden uden at den refresher hele siden, kun scriptet.
Ja en iframe er en mulighed, men så tager den jo plads på brugersiden... Og sætter jeg iframen til style="display:none;" så er post beskeden jo også hidden..
myid = session("bruger") Set rspost = conn.execute("select * from indbakke where BrugerID="&myid&" and Last=0")
if not rspost.eof then%> <script type="text/javascript"> function hideAd(divId) { if (document.layers) document.layers[divId].visibility = 'hide'; else if (document.all) document.all[divId].style.visibility = 'hidden'; else if (document.getElementById) document.getElementById(divId).style.visibility = 'hidden'; }
function adDown(divId) { state=typeof topPos; if(state=='undefined') topPos=-260; if(topPos < 75) { topPos+=3; if (document.layers) document.layers[divId].top = topPos; else if (document.all) document.all[divId].style.top = topPos; else if (document.getElementById) document.getElementById(divId).style.top = topPos;
setTimeout("adDown('pop');",25); } } </script>
<script type="text/javascript"> if (parseInt(navigator.appVersion) >= 4 && navigator.javaEnabled()) { document.write('<div id="pop"><table bgcolor="#cccccc" border="0" style="border:1px solid black;"><tr><td align="right" height="24"><a href="java script:void(0)" style="text-decoration:none; color:#000000; border:1px solid black;" onclick="hideAd(\'pop\')">x</a></td></tr><tr><td align="center"><font size="5"><strong>Ny Post</strong></font><br><br>Du har modtaget post fra<br><strong>8-Ball</strong><br><br><a href="welcome.asp?page=post&action=indbakke">Gå til indbakke</a><br /><br /></td></tr></table></div>');
if (document.layers) document.layers.pop.left = ((window.innerWidth / 2) - (330 / 2)); else if (document.all) document.all.pop.style.left = ((document.body.offsetWidth / 2) - (330 / 2)); else if (document.getElementById) document.getElementById("pop").style.left = ((window.innerWidth / 2) - (330 / 2)); } </script> <%end if
end if %>
<!-- Server Refresh Script --> <html> <head> <title>chkPost Funktion</title>
hvorfor dog have så mange linier kode når min ene linie kan gøre det?
Du undgår under ingen omstændigheder en iframe hvis hele siden ikke må reloade - og i og med at den selvfølgelig ikke må vises på siden bliver du nødt til at lave noget script der går fra iframen og ud til parent eller laver en ganske almindelig popup.
tænkte mere på om du havde mulighed for at illustrere hvordan jeg via en skjult iframe på brugersiden kan skubbe en besked ud fra iframen sådan at brugeren kan se den. Vil gerne sådan at iframen får attributten style="display:none;" sådan at den hverken kan ses eller optager plads, men stadig kan skyde popuppen op så brugerne kan se den når der er post. F.eks. den popup i eksemplet herover.?
læg dine funktioner på parent-siden (dvs den side der indeholder iframen og ikke den side i selve iframen) og kald din function med parent.adDown('pop').
right keyseroze... Jeg har forsøgt mig lidt, og er kommet frem til følgende, men det virker dog stadig ikke.
Siden hvor popuppen skal vises indeholder følgende: ********************************************** <iframe src="../checkPost.asp" height="0" width="0" id="test1" style="visibility:hidden"></iframe> **********************************************
myid = session("bruger") Set rspost = conn.execute("select * from indbakke where BrugerID="&myid&" and Last=0")
if not rspost.eof then%> <script type="text/javascript"> parent.document.getElementById('test1').style.visibility = 'visible'; function hideAd(divId) { if (document.layers) document.layers[divId].visibility = 'hide'; else if (document.all) document.all[divId].style.visibility = 'hidden'; else if (document.getElementById) document.getElementById(divId).style.visibility = 'hidden'; }
function adDown(divId) { state=typeof topPos; if(state=='undefined') topPos=-260; if(topPos < 75) { topPos+=3; if (document.layers) document.layers[divId].top = topPos; else if (document.all) document.all[divId].style.top = topPos; else if (document.getElementById) document.getElementById(divId).style.top = topPos;
setTimeout("adDown('pop');",25); } } </script>
<script type="text/javascript"> if (parseInt(navigator.appVersion) >= 4 && navigator.javaEnabled()) { document.write('<div id="pop"><table bgcolor="#cccccc" border="0" style="border:1px solid black;"><tr><td align="right" height="24"><a href="java script:void(0)" style="text-decoration:none; color:#000000; border:1px solid black;" onclick="hideAd(\'pop\')">x</a></td></tr><tr><td align="center"><font size="5"><strong>Ny Post</strong></font><br><br>Du har modtaget post fra<br><strong>8-Ball</strong><br><br><a href="welcome.asp?page=post&action=indbakke">Gå til indbakke</a><br /><br /></td></tr></table></div>');
if (document.layers) document.layers.pop.left = ((window.innerWidth / 2) - (330 / 2)); else if (document.all) document.all.pop.style.left = ((document.body.offsetWidth / 2) - (330 / 2)); else if (document.getElementById) document.getElementById("pop").style.left = ((window.innerWidth / 2) - (330 / 2)); } </script> <%end if
end if %>
<!-- Server Refresh Script --> <html> <head> <title>chkPost Funktion</title>
hehe nej.. Jeg får ingen fejl.. Der sker bare ingenting, popuppen kommer ikke frem selvom der er post.. Hvis jeg eksekverer checkPost.asp alene kommer popuppen fint..
parent.document.getElementById('test1').style.visibility = 'visible'; ligger i den første script blok i checkPost.asp - er dog ikke sikker på om den er placeret korrekt der.
prøv at forklar hvad det er du vil så - det som den ene linie gør er at sætte din iframe synlig, men da højden og bredden er 0 er der jo ikke noget at vise? så skal du også ændre størrelsen på iframen... min tanke var at flytte det der nu en skulle vises ud af iframen.
Ja præcis.. Det jeg vil er at den popup der kommer i iframen bliver skubbet ud af iframen. Ok kan også godt se nu det du siger - det giver ikke megen mening. Men forstår desværre ikke det du siger i din kommentar 16/11-2006 13:50:26.
Eller jo det tror jeg, jeg gør. men har ingen idé om hvordan jeg kan udføre dette
checkPost.asp ser ud sådan ud *************************************** <% set Conn = Server.CreateObject("ADODB.Connection") Conn.Open " DRIVER=MySQL ODBC 3.51 Driver; SERVER=xxxx; UID=xxxx; PWD=xxxx; DATABASE=xxxx;" Session.lcid = 1030
if session("bruger") <> "" then
myid = session("bruger") Set rspost = conn.execute("select * from indbakke where BrugerID="&myid&" and Last=0")
if not rspost.eof then%> <script type="text/javascript"> parent.document.getElementById('test1').style.visibility = 'visible'; parent.document.getElementById('test1').style.display= 'block'; parent.document.getElementById('test1').innerHTML= ''; function hideAd(divId) { if (document.layers) document.layers[divId].visibility = 'hide'; else if (document.all) document.all[divId].style.visibility = 'hidden'; else if (document.getElementById) document.getElementById(divId).style.visibility = 'hidden'; }
function adDown(divId) { state=typeof topPos; if(state=='undefined') topPos=-260; if(topPos < 75) { topPos+=3; if (document.layers) document.layers[divId].top = topPos; else if (document.all) document.all[divId].style.top = topPos; else if (document.getElementById) document.getElementById(divId).style.top = topPos;
setTimeout("adDown('pop');",25); } } </script>
<script type="text/javascript"> if (parseInt(navigator.appVersion) >= 4 && navigator.javaEnabled()) { document.write('<div id="pop"><table bgcolor="#cccccc" border="0" style="border:1px solid black;"><tr><td align="right" height="24"><a href="java script:void(0)" style="text-decoration:none; color:#000000; border:1px solid black;" onclick="hideAd(\'pop\')">x</a></td></tr><tr><td align="center"><font size="5"><strong>Ny Post</strong></font><br><br>Du har modtaget post fra<br><strong>8-Ball</strong><br><br><a href="welcome.asp?page=post&action=indbakke">Gå til indbakke</a><br /><br /></td></tr></table></div>');
if (document.layers) document.layers.pop.left = ((window.innerWidth / 2) - (330 / 2)); else if (document.all) document.all.pop.style.left = ((document.body.offsetWidth / 2) - (330 / 2)); else if (document.getElementById) document.getElementById("pop").style.left = ((window.innerWidth / 2) - (330 / 2)); } </script> <%end if
end if %>
<!-- Server Refresh Script --> <html> <head> <title>chkPost Funktion</title>
og filen hvori popuppen skal vises: ************************************************ <div id="test1" style="visibility: hidden; display: none;">test</div> <iframe src="../checkPost.asp" height="0" width="0" id="test1" style="visibility:hidden;"></iframe> ************************************************
mit spørgsmål er så... hvordan kan jeg få begge funktioner ind i parent.document.getElementById('test1').innerHTML= ''; som er i den første script blok? Der er jo de funktioner der skal ud af iframen da de angiver popuppen
jeg kan jo ikke smide jo script funktioner ind imellem ' ' i denne streng parent.document.getElementById('test1').innerHTML= '';. Så bliver funktionerne jo fortolket som tekst, og det er jo ikke det vi vil
det jeg har forsøgt at fortælle er jo netop at den del af koden skal helt ud af iframen - hvis du lægger den uden for iframen sammen med alle functions kan du gøre 100% som var der ingen iframe.
Hmmm ... Martin Jørgensen ... er det ikke ham fra landsholdet? Ajax og X(HT)ML er i hvert fald ikke det, han ved noget om - og det samme gælder 'vor ven' fra w3schools.com :)
Begge scripts sender HTML-formaterede data, som indsættes med innerHTML. Nu forholder det sig bare sådan, at innerHTML aldrig har været del af nogen officiel standard ... og bliver det heller aldrig. Desuden vil brugen af innerHTML i en browser med ægte XHTML-understøttelse få denne til at dø med et hult suk og en XML-fejl.
Påstanden om, at det slet ikke ville kunne gøres med XML, forstår jeg overhovedet ikke. Gad vide, hvorfor alle mulige andre kodere mon kan løse den slags? :)
Sluttelig er der ingen, der siger, man behøver bruge XML til at formatere de returnerede data. Det kan ligeså godt gøres med (min personlige favorit) JSON, som er slankere og mere direkte at bruge i JavaScript. Samtidig er det i øvrigt X-platform og kan bruges til alt fra JS over Java til C.
/mvh </bole>
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.