• Wir werden in den nächsten Tagen verschiedene Wartungsoperationen und Optimierungen am Server durchführen. Es wird zu mehreren Ausfällen kommen, die teilweise auch mehrere Stunden umfassen können.

HTML/Java-Script/PHP: Popup öffnen, wenn sich Datei geändert hat

Joined
Mar 30, 2007
Messages
1,989
Points
0
Hallo an die Programmier-Gurus!
Ich tüftle gerade etwas an einer Webseite herum und versuche nun folgendes:
Ich habe eine Textdatei, welche ständig neuen Inhalt bekommt.
Sobald nun diese Textdatei geändert wird, möchte ich dass sich
auf einer Homepage, welche ich Offline verwende, ein popup-Fenster öffnet
welches mir sagt, dass die Datei geändert wurde.
Falls nichts geändert wurde, so soll auch keine Meldung erscheinen.

Die Homepage lasse ich mittels META-Tag jede Minute neu laden, jedoch bin ich mir
nicht sicher, ob ich für das popup nur mit HTML-Auskomme, da ja abgefragt werden muss,
ob sich die Datei geändert hat.

Ich denke dass ich mindestens Java-Script verwenden muss oder auch PHP.
Hat jemand Ahnung, wie ich das anstellen könnte?

Auch wenn mir die Aufgabe sehr leicht vor kommt, stehe ich trotzdem wie der Ochse vor dem Berg :ugly
 
Klingt nach ner typischen AJAX-Anwendung (das wäre dann (im Regelfall) PHP und JS). Solltest du dich mal nach umschauen, vlt find ich gleich auch noch etwas Zeit, was zu finden.
 
Sofern du während der Übertragung der relevanten Informationen der Textdatei keine Trennung zwischen Client und Server benötigst oder vorliegen hast, kannst du dies auch rein über JavaScript realisieren.

Wie .deviant schon sagt bieten sich dazu AJAX-Techniken an.

Benötigst du ein Minimalbeispiel, oder hast du dein Vohaben schon umgesetzt, bzw. reicht dir diese Information?
 
Bisher habe ich folgendes realisiert:
- Ich aktualisiere eine vorliegende Textdatei
- Sobald ich diese abspeichere, passiert zunächst garnichts (ist auch ok so)
- Auf der Webseite habe ich ein Refresh-Intervall eingebaut:
Code:
<meta http-equiv="REFRESH" content="10; URL=Index.htm">
womit die Seite alle 5-10 Minuten aktualisiert wird.
- Diese Aktualisierung möchte ich dazu ausnutzen, dass mir kontrolliert wird, ob sich die Textdatei geändert hat.
Wenn dem so ist, dann soll sich ein Popupfenster öffnen mit der Meldung: Neue Nachricht, oder sowas. Der Inhalt
ist egal. Hat sich nichts geändert, dann braucht es das Popup auch nicht.

Folgendes Javascript habe ich gefunden, welches mir ein popup öffnet aber nichts abfragt:
-
Code:
<script type="text/javascript">
<!--
function popup(mylink, windowname)
{
if (! window.focus)return true;
var href;
if (typeof(mylink) == 'string')
href=mylink;
else
href=mylink.href;
window.open(href, windowname, 'width=400,height=200,scrollbars=no,menubar=no');
return false;
}
//-->
</script>

Aufgerufen wird das Script im Body:
Code:
<body onload="popup('Meldung.html', 'MELDUNG')">
Meldung.html beinhaltet auch lediglich einen statischen Text: "Neue Nachricht"

Das Javascript oben muss noch etwas aufgebohrt werden, jedoch habe ich in google keine
anständige seite gefunden, wo mein Problem ansatzweise behandelt wird.

Sind meine Ansätze so überhaupt vereinbar?
Ich freue mich über jedes Minimalbeispiel :D

Danke inzwischen!
 
Ok, ich denke da ist noch einiges an Arbeit drin.

Zunächst würde ich den von dir beschriebenen Prozess vollkommen unabhängig von deinem HTML-Gerüst realisieren. Somit sieht unser benötigtest HTML-Grundgerüst wie folgt aus.

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Ich bin nur ein Titel ...</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body>
    <script type="text/javascript" src="./jquery.js"></script>
    <script type="text/javascript" src="./myscript.js"></script>
</body>
</html>

Der für uns wesentliche Aspekt ist das Einbinden der JavaScript-Dateien.
Code:
<script type="text/javascript" src="./jquery.js"></script>
<script type="text/javascript" src="./jquery.js"></script>
Dabei handelt es sich bei der Datei "./jquery.js" um das JavaScript-Framework jQuery, welches uns das schreiben unseres speziellen JavaScriptes erleichtert und sicherstellt, dass es bei unterschiedlichen Browsern nicht zu problemen kommt. Das arbeitende JavaScript befindet sich in der Datei "./myscript.js". Beide Dateien können natürlich auch einen anderen Namen haben und an sich an eine anderen Stelle befinden, obiges ist nur eine einfache Möglichkeit. Sofern du ein größeres Projekt aufbauen möchstest solltest jedoch eine sinnvolle Ordnerstruktur anlegen um es übersichtlicher zu gestallten. Sofern dies länger als ein paar Tage oder wenige Wochen genutzt werden soll, solltest du der Datei "./myscript.js" einen intuitiveren Namen geben, so dass du später schon am Namen erkennen kannst, was sich dahinter verbirgt.

Falls du genaueres über die Positionierung der Aufrufe von JavaScript-Dateien etc. wissen möchtes, so kann ich dies gerne auch nochmal ansprechen.

Kommen wir nun zu einem sehr simplen Quellcode. Ich werde hierbei nicht auf auf mögliche Lösungen eingehen, bei denen der Server dem Browser mitteilen kann, dass es Änderungen gibt, wie es mit Comet oder HTML5 WebSocket möglich wäre, da das eine noch eine Anpassung des Servers benötigt und sich das andere noch in einer Entwicklungsphase befindet, sondern eine Ajax-Lösung nutzen, bei der unser Client immer wieder eine Anfrage stellen muss um zu prüfen, ob es Änderungen gab.

Der Inhalt der Datei "./jquery.js" sollte dann wie folgt lauten:
JavaScript:
$(document).ready(function()
{
    var cache = new String();
    
    function event()
    {
        $.ajax({
            url: 'http://beispiel.de/textdatei',
            dataType: 'text',
            success: function(data)
            {
                if(data != cache)
                {
                    cache = data;
                    window.open(
                        'http://beispiel.de/meldung.html',
                        'Meldung',
                        'width=400,height=200,scrollbars=no,menubar=no'
                    );
                }

                setTimeout(
                    event,
                    5 * 60 * 1000 // 5 minutes
                );
            }
        });
    };
    event();
});

Sofern du aufgrund von Übertagunsraten einen zu langsamen Aufbau dieser Seite beobachtest bietet es sich an, den Aufruf
Code:
<script type="text/javascript" src="./jquery.js"></script>
<script type="text/javascript" src="./jquery.js"></script>
in einen einzelnen Aufruf umzuwandeln und den den Inhalt beider Dateien entsprechend in einer Datei zu verknüpfen. Dadurch wird die Anzahl der Verbindungen zum Laden der JavaScript Dateien entsprechend um eine Verbindung verringert und somit die Zeit für diese Verbindungsaufbau eingesparrt.
Code:
<script type="text/javascript" src="./jquery_and_myscript.js"></script>
Generell sollten wir dann aber auch andere Optimierungsmöglichkeiten besprechen.
 
Hi,
das ist mal eine Anleitung, DANKE! :D
ok, da bin ich mit meinem Ansatz wohl noch ziemlich weit von der Lösung entfernt :)

Ich werde das alles durchgehen und mich dann entweder mit dem fertigen Script melden,
oder noch wertere Sachen Fragen :p

Danke inzwischen!
 
Hallo!
So, ich habe nun das Problem gelößt, aber ich habe einen anderen Ansatz verwendet und bin von
der Lösung über HTML, Javascript, PHP usw. komplett weg gegangen.
Ich verwende nun Psexec von Sysinternals in kombination mit dem msg-Befehl von Windows.
Bei der HTML-Lösung muss die Webseite permanent geöffnet sein und das wird schon zum Problem.

Nochmals Danke an alle, speziell an Osbes, für die Hilfe!
 
Back
Top Bottom