Nach Aktualisierung das "Springen" unterbinden

Fragen zum Thema HTML, JavaScript, PHP
HerrKlinke
Verifiziert
Beiträge: 76
Registriert: Do Sep 04, 2008 2:12 pm
Wohnort: Wismar
Kontaktdaten:

Nach Aktualisierung das "Springen" unterbinden

Beitrag von HerrKlinke » Di Okt 14, 2008 4:03 pm

Erstmal Hallo!

Also, folgendes Problem:
Ich arbeite zurzeit an einem Messenger [exe]. Das Hauptdisplay stellt ein normaler Webbrowser da.
Kommt nun eine Nachricht an, wird sie, zusammen mit den anderen, bereits empfangenen Nachrichten in eine html Datei geschrieben und der Webbrowser aktualisiert sich. Damit der Browser immer wieder am Ende ankommt, also automatisch scrollt, ist am Ende der html immer die Sprungmarke "bottom".

Wenn sich jetzt aber der Browser aktualisiert, ist er zuerst immer ganz oben auf der Seite und springt dann erst zur Sprungmarke. Ich habe also bei jeder neuen Nachricht ein kleines "zucken" am Bildschirm.

Ich hatte gehofft, einer kann mir da mit Java, Ajax, oder sonst was, was im Browser läuft [ie], irgendwie weiterhelfen.
Ich denke, es könnte gehen, wenn immer nur die letzte Nachricht >dazu< geladen wird.

Jemand ne Idee? Danke schonmal im Voraus.

Benutzeravatar
Dubbel
Beiträge: 197
Registriert: So Jul 06, 2008 6:25 pm
Wohnort: Kopenhagen
Kontaktdaten:

Re: Nach Aktualisierung das "Springen" unterbinden

Beitrag von Dubbel » Di Okt 14, 2008 6:12 pm

Du kannst mit Ajax immer wieder die Nachrichten einem Div hinzufügen.

Code: Alles auswählen

function update(source, div_id)
{
   if (XMLHttpRequestObject){
      var obj = document.getelementById(div_id);
      XMLHttpRequestObject.open("GET", source);

      XMLHttpRequestObject.onreadystatechange = function()
      {
         if(XMLHttpRequestObject.readyState == 4 && XMLHttpRequestQbject.status == 200) // Wenn übertragung okay
         {
            obj.innerHTML .= XMLHttpRequestObject.responseText; // Text wird angehängt
         }
      }
      XMLHttpRequestObject.send(null);
   }
}
sorce muss die Quelle der Informationen sein, also in deinem Fall die Seite, die die neuste Nachricht anzeigt (wenn ich dich richtig anzeigt).
In div_id natürlich die id des Divs in dem der Chat Verlauf steht.
So müsste das klappen...ich habs aber nicht getestet

(BTW: Ich denke du hast schon daran gedacht die neusten Nachrichten einfach nach oben zu packen oder? ^^)

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Nach Aktualisierung das "Springen" unterbinden

Beitrag von nufan » Di Okt 14, 2008 6:18 pm

HerrKlinke hat geschrieben:Wenn sich jetzt aber der Browser aktualisiert, ist er zuerst immer ganz oben auf der Seite und springt dann erst zur Sprungmarke. Ich habe also bei jeder neuen Nachricht ein kleines "zucken" am Bildschirm.
Das Problem hab ich unter Ubuntu-Skype auch. Wenn das Fenster voll ist, kann man die letzte Nachricht nicht sofort sehen. Dann muss ich entweder scrollen oder warten bis jemand anderes eine Nachricht schreibt.

Lg

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Nach Aktualisierung das "Springen" unterbinden

Beitrag von cloidnerux » Mi Okt 15, 2008 1:02 pm

wenn du das schon als *.exe machst, dann soltest du mal schauen ob es da ne einstellung gibt oder mal die webbrowserklasse dahingehnd abändern
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Nach Aktualisierung das "Springen" unterbinden

Beitrag von Xin » Mi Okt 15, 2008 4:11 pm

HerrKlinke hat geschrieben:Kommt nun eine Nachricht an, wird sie, zusammen mit den anderen, bereits empfangenen Nachrichten in eine html Datei geschrieben und der Webbrowser aktualisiert sich. Damit der Browser immer wieder am Ende ankommt, also automatisch scrollt, ist am Ende der html immer die Sprungmarke "bottom".

Wenn sich jetzt aber der Browser aktualisiert, ist er zuerst immer ganz oben auf der Seite und springt dann erst zur Sprungmarke. Ich habe also bei jeder neuen Nachricht ein kleines "zucken" am Bildschirm.
Kannst Du die Darstellung beim Neuladen des Logs unterbinden, so dass erst ans Ende gesprungen wird und dann erst gezeichnet wird?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Nach Aktualisierung das "Springen" unterbinden

Beitrag von cloidnerux » Mi Okt 15, 2008 4:24 pm

Ich denke nicht, da er entweder irgendeine vorgefertigte klasse nutzt, oder unwarscheinlciher er eine selber gebaut hat.
Man müsste den webrowser müsste man direkt so umporgrammieren, das wenn er das dokument ließt, er nach unten geht, heißt: wenn das log größer als der bildschirmbereich ist, dann fang an zu scroillen, direkt beim laden
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Nach Aktualisierung das "Springen" unterbinden

Beitrag von Xin » Mi Okt 15, 2008 4:36 pm

cloidnerux hat geschrieben:Ich denke nicht, da er entweder irgendeine vorgefertigte klasse nutzt, oder unwarscheinlciher er eine selber gebaut hat.
Öhm... ich frage ihn, damit er nachschauen kann, weil es keinen Sinn hat, wenn wir hier raten oder Meinungen austauschen, was seine Klasse kann und was nicht.
Er kann also nachgucken und entweder das Problem lösen oder feststellen, dass er das Problem anders lösen muss und entsprechend weitergehende Informationen liefern.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

HerrKlinke
Verifiziert
Beiträge: 76
Registriert: Do Sep 04, 2008 2:12 pm
Wohnort: Wismar
Kontaktdaten:

Re: Nach Aktualisierung das "Springen" unterbinden

Beitrag von HerrKlinke » Do Okt 16, 2008 9:25 am

Hi,
also erstmal danke für die Antworten.
Der Browser ist vorgefertigt und bietet nur einen Parameter: Die Adresse.
Funktionen gibt es auch nur refresh, load, stop, back, forward.
Die von Dubbel, ist schon nicht schlecht.
Ich bin noch nicht zum Testen gekommen, aber ich mach's gleich heute nach der Schule.

Eine Frage noch: Wie benutze ich die Funktion?
Also mein altes System war:

Code: Alles auswählen

C:\[...]Temp\klmtpm.html#bottom
Müsste ich dann:

Code: Alles auswählen

C:\[...]Temp\klmtpm.html?update(C:\[...]Temp\klmtpm.html,6371)

versuchen?
Und wie muss die Html aussehen? Also alle Nachrichten in ein div und eine ID eingeben? , Sorry, bin nicht so fit auf dem Gebiet.

Danke für eure Hilfe.
@Dubbel ja, daran habe ich auch gedacht, aber das ist irgendwie dämlich^^

HerrKlinke
Verifiziert
Beiträge: 76
Registriert: Do Sep 04, 2008 2:12 pm
Wohnort: Wismar
Kontaktdaten:

Re: Nach Aktualisierung das "Springen" unterbinden

Beitrag von HerrKlinke » Do Okt 16, 2008 3:37 pm

Hi,
also ich hab's gerade getestet, aber es hat nicht wirklich geklappt, denn ich verwende den IE aus der ATL.dll und der ist meistens in der Version 6. Dann hab ich in nem Tutorial mir die Grundlagen beigebracht und habe den dort Vorhandenen Code mit dem von Dubbel gemixt. Komischerweise hat der "."-Operator nicht funktioniert. Stattdessen habe ich das + verwendet.
Hier der überarbeitete Code:
(Grundlage war: http://www.webmasterpro.de/coding/artic ... laden.html )

Code: Alles auswählen

<script type="text/javascript">

var xmlHttpObject = false;

if (typeof XMLHttpRequest != 'undefined') 
{
    xmlHttpObject = new XMLHttpRequest();
}
if (!xmlHttpObject) 
{
    try 
    {
        xmlHttpObject = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e) 
    {
        try 
        {
            xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e) 
        {
            xmlHttpObject = null;
        }
    }
}

function loadContent()
{
    xmlHttpObject.open('get','hallo.txt');
    xmlHttpObject.onreadystatechange = handleContent;
    xmlHttpObject.send(null);
    return false;
}

function handleContent()
{
    if (xmlHttpObject.readyState == 4)
    {
        document.getElementById('myContent').innerHTML += xmlHttpObject.responseText; 
    }
}
</script>

<p>Ich werde nicht neu geladen</p>
<p id="myContent">
    <a href="#" onclick="loadContent();">Klick mich</a>.
    Ich werde neu geladen
</p>
Nach einiger Überarbeitung meiner exe, bin ich dann wohl bald am Ziel.
Wenn ich mit dem gesamten Projekt fertig bin, werde ich es sicher mal vorstellen.

Danke für eure Hilfe.

Benutzeravatar
Dubbel
Beiträge: 197
Registriert: So Jul 06, 2008 6:25 pm
Wohnort: Kopenhagen
Kontaktdaten:

Re: Nach Aktualisierung das "Springen" unterbinden

Beitrag von Dubbel » Do Okt 16, 2008 6:14 pm

Kein Problem.

Ich wusste doch das das .= in JS etwas komisch aussah...hab wohl zuviel PHP programmiert in letzter Zeit :roll:

Schön, dass es nun geklappt hat, und dass du die Lösung auch für andere hier gepostet hast :)

Antworten