Ausführung von einem Script zeitweise blockieren
PinoPinelli
- javascript
0 LX0 Struppi0 PinoPinelli0 Struppi0 PinoPinelli0 Struppi
0 PinoPinelli
0 molily
Hallo zusammen,
ich habe hier ein Problem und hoffe, dass mir einer von euch den Stoß in die richtige Richtung geben kann, um dieses zu lösen.
Innerhalb einer HTML-Seite habe ich ein eingebettetes Flash-Objekt, mit welchem der Nutzer interagieren kann. In diesem gibt es verschiedene Menüpunkte für den Nutzer. Ich tracke nun innerhalb dieses Objekts mit wie lange der einzelne Nutzer insgesamt auf den verschiedenen Menüpunkten verweilte. Wenn der Nutzer nun das Fenster schließt (es ist ein Pop-Up), sollen diese Informationen an ein PHP-Script geschickt werden (per HTTP-Request) und von dort in die Datenbank geschrieben werden.
Hierzu benutze ich den onbeforeunload-Eventhandler auf das body-Element der umgebenden HTML-Seite.
Während ich zu meinen Testzwecken innerhalb der "SendeAnPhp"-Funktion noch ein alert("Senden erfolgreich"); am Ende habe, funktioniert das alles auch prima, da dieses alert-Fenster ja das endgültige Schließen der Seite mit dem Flash- und Javascript-Inhalt unterbindet, bevor der OK-Button gedrückt wird.
Für die produktive Umgebung kann ich ein solches Verhalten dem User aber nicht zumuten. Aber ohne das alert scheint Flash und Javascript gestorben zu sein, bevor der Request an mein PHP-Script erfolgreich gefeuert wurde. Jedenfalls kommt nichts an und somit auch nichts in die DB.
Ich habe auch schon versucht, mit einer (CPU-fressenden) Sleep-Funktion einen Workaround zu schaffen, was aber nicht geholfen hat.
Weiß jemand, was alert() im Hintergrund macht, so dass ich es nachbauen kann oder hat jemand eine andere Idee??? Ich bin leider mit meinem Latein am Ende...
Ich bin für jede Hilfe dankbar...
der Pino.
Wie wäre es mit einem window.setTimeout
anstelle einer Sleep-Funktion?
Gruß, LX
Wie wäre es mit einem
window.setTimeout
anstelle einer Sleep-Funktion?
Hast du ddie Frage gelesen?
Also, das Skript beim schliessen eines Fensters noch später als onbeforeunload starten? Das klingt gespenstisch.
Struppi.
Wie wäre es mit einem
window.setTimeout
anstelle einer Sleep-Funktion?Hast du ddie Frage gelesen?
Also, das Skript beim schliessen eines Fensters noch später als onbeforeunload starten? Das klingt gespenstisch.
Nein das Script wird ja korrekt gestartet. Innerhalb der Funktion, die durch onbeforeunload aufgerufen wird, hole ich mir die Instanz des Flash-Objekts per
var movie = getFlashMovie("movieID");
Auf dieser Instanz rufe ich dann eine Funktion auf, die vorher in Flash angemeldet wurde. Das heisst, der Flash-Film schickt den Request an das PHP-Script. Und dieses soll dann die Infos in die DB schreiben.
Und wie bereits erwähnt: Solange ich das Fenster mit Hilfe von alert()
vom Schließen abhalte, klappt auch alles. Immerhin brauch so ein Umweg Javascript->Flash->PHP->Datenbank auch seine Zeit.
Habe ich kein alert()
sind Javascript und vor allem Flash aber schon zerstört, bevor der Request zu PHP erfolgreich geschickt werden konnte.
Und ich habe leider keine Idee, wie ich ansonsten das User-Verhalten für Statistikzwecke mittracken kann, was aber überaus wichtig ist.
Wie wäre es mit einem
window.setTimeout
anstelle einer Sleep-Funktion?Hast du ddie Frage gelesen?
Also, das Skript beim schliessen eines Fensters noch später als onbeforeunload starten? Das klingt gespenstisch.Nein ...
Liest hier eigentlich überhaupt jemand das was man schreibt???
Ich habe nicht dir geantwortet.
Struppi.
Liest hier eigentlich überhaupt jemand das was man schreibt???
Ich habe nicht dir geantwortet.
Mag ja sein. Ich aber dir...
Denn ich wollte klarstellen, dass das Starten des Scripts nicht das Problem ist (und es auch nicht noch später als onbeforeunload starten soll).
Das Problem liegt darin, dass es zu früh beendet wird...
Liest hier eigentlich überhaupt jemand das was man schreibt???
Ich habe nicht dir geantwortet.
Mag ja sein. Ich aber dir...
Denn ich wollte klarstellen, dass das Starten des Scripts nicht das Problem ist (und es auch nicht noch später als onbeforeunload starten soll).
Das Problem liegt darin, dass es zu früh beendet wird...
Genau das habe ich LX versucht zu erklären, es bestand also keine Notwendigkeit mir das zu erklären, was ich vorher erklärt hatte.
Und: Nein, ich weiß keine Antwort auf dein Problem.
Struppi.
Wie wäre es mit einem
window.setTimeout
anstelle einer Sleep-Funktion?
Ja - habe ich auch schon versucht. Aber setTimeout meldet ja nur an, dass eine Funktion nach einer bestimmten Zeit ausgeführt werden soll.
Da aber in der Zwischenzeit das Javascript durch Schließend es Fensters bereits weg ist, hilft das leider nicht weiter..
Hallo,
du bist auf ein klassisches Problem gestoßen, was durch deine JS-Flash-Brücke nur noch verschärft ist. Ohne einen alert bzw. einer Rückgabe eines Strings durch den beforeunload-Handler wirst du den Browser nicht dazu bringen, auf deine Serverübertragung zu warten. Da musst du dir ein anderes Konzept ausdenken, wie du die Daten zwischendurch zum Server bekommst. Wirklich zuverlässig wird das nie sein.
Aber vielleicht gibt es einen Flash-Trick, der mir unbekannt ist.
Mathias