Vraag & Antwoord

Webprogrammeren & scripting

Chatroom-script ruzie met IE

12 antwoorden
  • Hi all, Ik probeer zelf een chatroom-script te schrijven. Nu zijn er 2 dingen essentieel: het automatisch verversen van de berichten EN het automatisch naar onder scrollen. Voor het scrollen had ik dit bedacht: het PHP script dat een nieuw bericht toevoegt aan messages.htm voegt onderaan ook een anchor <A name="END"></a> toe (haalt eerst vorige anchor weg). Vervolgens kun je dus als URL "messages.htm#END" gebruiken... Refresh 'spreekt voor zich', dus het resultaat werd: <META HTTP-EQUIV="refresh" content="3; URL=messages.htm#END"> Ik gebruik win98SE met IE50 en die snapt deze geldige URL uiteraard. Maar helaas hebben die knurften bij M$ nog nooit gehoord van "downward compatible" en blijkt dat als je het END-anchor gebruikt in het 'geavanceerde' IE60 het verversen ook 'in de ankers' gaat... (Of andere versies werken weet ik niet) Dus.... dan maar een 'gewone' URL (zonder anchor) en dan een javascriptje voor het scrollen: <script language="javascript">self.location="#END";</script> Leuk bedacht, maar DAT werkt weer niet in IE50 :evil: Heb ook nog dit geprobeerd: <BODY onLoad=window.setTimeout(\"location.href='messages.htm#END'\",3000)> maar dat verhelpt niets. Mijn vraag na dit lange verhaal: hoe krijg ik dit WEL werkend onder alle (gangbare) browsers?? Mijns inziens heb ik gedaan wat ik kon met mijn huidige kennis... (Ik kan redelijk met HTML en PHP overweg, maar mijn javascript kennis is erg beknopt) Wie kan en wil me hierbij helpen? Alvast bedankt!
  • Je zou de [b:8dff91a190]location.hash[/b:8dff91a190] property nog kunnen proberen.
  • Hoi Annie, Zoals ik al zei, m'n javascript kennis is nog erg beknopt. Ik denk dat je dit bedoelde: <HTML> <HEAD> <META HTTP-EQUIV="refresh" content="3; URL=messages.htm"> <SCRIPT language="javascript">location.hash='#END';</SCRIPT> </HEAD> <BODY bgcolor=#000000>bla bla.... maar dat werkt helaas nog steeds niet in IE50: geen refresh, laat staan scrolldown. Ook als ik javascript na <BODY> tag plaats werkt t niet...
  • En als je het JavaScript pas ná het laden van de pagina aanroept, dus met het onLoad-event... - Bas
  • Hi, Zelfde laken en pak: in IE50 wel scroll down maar geen auto refresh meer... :(
  • Waarom gebruik je de meta refresh tag? Probeer dat anders ook eens met JavaScript. Dus in het onLoad-event zet je eerst een timer die start, vervolgens scroll je naar beneden. Zet er geen [i:a2189d90b6]return false;[/i:a2189d90b6] in, anders werkt het waarschijnlijk niet... - Bas
  • Hmm, nu wordt t vreemd: als ik de messages.htm open zie ik hem verversen en de url steeds veranderen in messages.htm#END Maar de toegevoegde messages komen er TOCH pas bij na een lel op de F5 toets en niet automatisch... Er is dan - als je javascript gebruikt -blijkbaar meer aan de hand, iets met de cache dat anders werkt dan bij de META-tag... ( :cry: als ze t nou s gewoon zo hadden gelaten in IE60, was ik eergisteren met m'n <META HTTP-EQUIV="refresh" content="3; URL=messages.htm#END"> gewoon klaar geweest... Knurften bij M$, ik zweer t je! ;) )
  • Voor de volledigheid, m'n htm ziet r nu zo uit: <HTML> <HEAD> <SCRIPT language="javascript"> function ScrollDn() { window.setTimeout("location.href='messages.htm'",3000); location.hash='#END'; } </SCRIPT> </HEAD> <BODY bgcolor=#000000 onLoad="ScrollDn()"> ...blaat... <A NAME="END"></A>
  • Uiteraard wil ik de code zo beperkt mogelijk houden op een pagina die door meerdere gebruikers elke 3 seconden opnieuw ingelzeen moet worden, maar t moet wel werken natuurlijk... Kan iets in de trend van onderstaand script misschien werken? (Ik krijg nu nog 'fout op pagina') <HTML> <HEAD> <SCRIPT language="javascript"> var meta='#END'; if (navigator.appVersion.indexOf("5.5")>-1)) meta=''; document.write('<META HTTP-EQUIV="refresh" content="3; URL=messages.htm'+meta+'">'); function ScrollDn() { if (navigator.appVersion.indexOf("5.5")>-1)) location.hash='#END'; } </SCRIPT> </HEAD> <BODY bgcolor=#000000 onLoad="ScrollDn()"> ...blaat... <A NAME="END"></A>
  • [quote:14354e9c11="Nick1812"]Kan iets in de trend van onderstaand script misschien werken? (Ik krijg nu nog 'fout op pagina') [/quote:14354e9c11] Natuurlijk kan dat werken. Of de browserdetectie de beste methode is weet ik alleen niet. Heb je al gezocht op browser specifieke bugs? IE5.0 stond er om bekend dat het behoorlijk wat steekjes liet vallen. Je fout wordt in ieder geval veroorzaakt doordat je een haakje te veel hebt staan in onderstaande regel. if [color=blue:14354e9c11][b:14354e9c11]([/b:14354e9c11][/color:14354e9c11]navigator.appVersion.indexOf[color=violet:14354e9c11][b:14354e9c11]([/b:14354e9c11][/color:14354e9c11]"5.5"[color=violet:14354e9c11][b:14354e9c11])[/b:14354e9c11][/color:14354e9c11]>-1[b:14354e9c11][color=blue:14354e9c11])[/color:14354e9c11][/b:14354e9c11][color=red:14354e9c11][b:14354e9c11])[/b:14354e9c11][/color:14354e9c11] location.hash='#END';
  • OK, ik vrees dat het scrollen naar een anchor vrij lastig gaat worden, dus ik ben ff aan het brainstormen geslagen en heb vervolgens internet afgestruind. Hier komt mijn 'schot voor de boeg' - Barstensvol met fouten waarschijnlijk, maar de 'oude rotten' zullen begrijpen waar ik heen wil. Voor de volledigheid enige uitleg wat ik in gedachten heb: * Chatters kunnen hun eigen kleur kiezen, dus eerst wordt array met mogelijke kleuren gedefinieerd * Begin <TABLE> (bepaal alvast breedte van kolommen) * Bepaal huidige lengte van message.txt, als message.txt langer is dan vorige keer, dan: - open messages.txt - ga naar positie waar vorige keer is geeindigd - totdat eof is bereikt lees regel, split regel in array, zet info in table - als eof: bewaar positie en lengte - sluit messages.txt [code:1:c37ed0099b] Colors=new Array("","C00000","E88800","FFDD22","008000","2020C0","800080","555555","999999","FF00FF","0080C0","00BB00","FFEE66","FFAA44","FF5048"); document.write('<TABLE BGColor=#000000><TR><TD Width=100> </TD><TD Width=450> </TD></TR>'); MessageFile = new File("messages.txt"); var Len=MessageFile.getLength(); if (Len>OldLen) { FileOpen = MessageFile.open("r"); if (FileOpen) { MessageFile.setPosition(Pos); while (!MessageFile.eof()) { Line = MessageFile.readln(); if (MessageFile.eof()) { var Pos=MessageFile.getPosition; OldLen=Len; } else { LineArray=Line.split("|"); var Name=LineArray[0]; var Color=LineArray[1]; var Message=LineArray[2]; document.write('<TR><TD align=right><FONT Face=Tahoma Size=2 Color=#'+Colors[Color]+'><b>'+Name+'</TD>'); document.write('<TD><Font Face=Tahoma size=2 color=#80c090><b>'+Message+'</TD></TR>'); } MessageFile.close(); } } } [/code:1:c37ed0099b] Het liefst giet ik dit later nog in een form dat automatisch wordt ververst, zoals bijv. in een klok-scriptje (ben je ook meteen af van het 'Navigeren beginnen-geluid' af...) Heeft zoiets 'overlevingskans'? Zijn er eventuele beperkingen zoals maximale lengte van 255 tekens per regel in het message.txt bestand? Zal ik hiermee verder wroeten of kan ik beter nog ff verder brainstormen? (In elk geval hartstikke bedankt voor de moeite so far!)
  • [quote:4baa770bc2="Nick1812"]... maar de 'oude rotten' zullen begrijpen waar ik heen wil...[/quote:4baa770bc2]Nou, deze ouwe rot kan je effe niet meer volgen ;) Ben je nu ineens bezig met client-side vb-script ipv PHP? Waarom? Wat biedt het als voordeel boven de anchor-methode? En hoe ga je de gegevens van de ene client nu naar de andere client overbrengen? Even een wel heel erg voor de hand liggende oplossing: is het geen optie dat je de berichten gewoon anders sorteert, dus de laatste boven? Andere optie waar je eens op kan gaan zoeken: stop alles in een "container" (window/div/iframe/...) waarvan je de hoogte kan bepalen en gebruik [url=http://www.devguru.com/Technologies/ecmascript/quickref/win_scrollto.html]window.scrollTo()[/url] om daarnaar toe te scrollen. Of (heel ranzig) misschien werkt een absurd hoge waarde wel om naar onder te scrollen.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.