WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   JavaScript: "aktualisiert am:" (http://www.wcm.at/forum/showthread.php?t=115805)

w_fuchs 17.11.2003 19:07

JavaScript: "aktualisiert am:"
 
Mit folgendem Code lass ich im bottom_frame das Änderungsdatum der Seite anzeigen.
Bei dem Code ist ja eig. nur folgendes wichtig:
var LastModDate = new Date(document.lastModified);
So, und jetzt die Frage: Woruaf bezieht sich dieses "document"? Denn er aktualisert nur, wenn ich auch tatsächlich im bottom_frame was ändere und z.B. nicht im main_frame.

Danke für die Hilfe!

<td width="7%" height="42">
<div align="left">




<font size="1"><font face="Verdana, Arial, Helvetica, sans-serif">Aktualisiert am:</font>
</font>
<font size="1" style="bold">
<script language="JavaScript">
<!-- Hide JavaScript from Java-Impaired Browsers
// -->
function initArray()
{
this.length = initArray.arguments.length
for (var i = 0; i < this.length; i++)
this[i+1] = initArray.arguments[i]
}
var DOWArray = new initArray("So","Mo","Di","Mi","Do","Fr","Sa");
var MOYArray = new initArray("Jan","Feb","März","Apr","Mai","Juni","J uli","Aug","Sept","Okt","Nov","Dez");
var LastModDate = new Date(document.lastModified);
var Name = navigator.appName;
document.write(DOWArray[(LastModDate.getDay()+1)],", ");
document.write(MOYArray[(LastModDate.getMonth()+1)]," ");
if ( Name == "Netscape" )
{
document.write(LastModDate.getDate(),", ",(LastModDate.getYear()+1900));
}
else
{
document.write(LastModDate.getDate(),", ",(LastModDate.getYear()));
}
</script>
</font></p>
</div></td>

jak 17.11.2003 19:41

document bezieht sich immer auf die gerade geladene Seite.
Wenn du das änderungsdatum des Hauptframes anzeigen willst musst du mit parent.frames[i].document... darauf zugreifen, wobei i die Nummer des Frames ist, das erste Frame ist frame[0], das zweite [1],usw.

Jak

w_fuchs 17.11.2003 19:49

Die Durchnummeriering bezieht sich auf die reihenfolge im frameset?
Mein Frameset:

<frameset rows="17%,83%" cols="*" border="0">
<frame name=FrameOben src=FrameOben.htm scrolling=no marginleft="8" marginheight="8" marginwidth="8" noresize>
<frameset rows="*" cols="19%,81%" border="0">
<frame name=FrameLinks src=FrameLinks.htm scrolling=no marginwidth="8" marginheight="0">
<frameset rows="5%,89%,6%" cols="*" border="0">
<frame name=FrameNewsticker src=FrameNewsticker.htm scrolling=no marginwidth="0" marginheight="5" noresize>
<frame name=FrameText src=FrameText.htm marginwidth="8" marginheight="0" scrolling="auto" noresize>
<frame name=FrameSponsoren src=FrameSponsoren.htm scrolling=no marginwidth="8" marginheight="0" noresize>
</frameset>
</frameset>
</frameset>

D.h. wenn ich den Main-Frame ("FrameText") als zu zählen definieren will, dann heißts:
var LastModDate = new Date(parent.frames[4].document.lastModified);
oder?

--> Ist es nicht möglich mehrere Frames einzubeziehen, d.h. EGAL WO etwas an der Seite geändert wurde - der Hinweis wird aktualisiert???

jak 17.11.2003 20:25

Wie die Zählung genau geht weiß ich nicht, mußt du wohl ausprobieren.
An und für sich sollte man ein Frame auch über parent.NameDesFrames ansprechen könnnen, ob das wirklich geht weiß ich aber nicht.

Zitat:

--> Ist es nicht möglich mehrere Frames einzubeziehen, d.h. EGAL WO etwas an der Seite geändert wurde - der Hinweis wird aktualisiert???
Das geht über einen Vergleich, du schaust einfach welches Datum "das größte"=neueste ist. Ich weiß allerdings nicht, ob man date einfach vergleichen kann.
Im zweifelsfall gets so (falls ich keinen Fehler eingebaut hab;)):
Code:

function findMaxTime{
 var index=0;
 var maxTime=parent.frames[0].document.lastModified.parse();
 for(int i=0;i<parent.frames.length;i++){
  var newTime=parent.frames[i].document.lastModified.parse();
  if (newTime>maxTime){
  maxTime=newTime;
  index=i;
  }
 }
return i;
}
var letzteAenderung=parent.frames[findMaxTime()].lastModified;

Die Funktion findMinTime läuft alle Frames durch (i=0 bis i=parent.frames.length-1) wenn eine Zeit größer(=neuer) als die aktuelle Zeit ist wird sie in maxTime gespeichert und der index des Frames in index gespeichert. Der Vergleichd er Zeiten erfolgt mittels parse(), das das Datum in Millisekunden seit dem 1.1.1970 zurückgint.
P.S.:Falls was nicht funktioniert, schau mal bei www.teamone.de/selfhtml vorbei, dort ist fast alles erklärt.

Jak

w_fuchs 17.11.2003 20:28

nur um sicherzugehen: wo bau ich das ein?

Hab schon mal herzlichen Dank für Deine Mühe - hast Dir ja echt viel gedanken gemacht!

jak 17.11.2003 21:02

Falls es funktioniert musst du den function Teil am Anfang ( vor "function initArray()" ) einbauen. der Teil " var letzteAenderung=parent.frames[findMaxTime()].document.lastModified;" muss ein bischen abgeändert werden (da hat sich ein kleinerFehler eingeschlichen, man muß klarerweise zuerst ein Date Objekt mittels new erzeugen): schreib einfach den Teil nach dem = dort hin wo jetzt "var LastModDate=new Date(document.lastModified);
" steht, so das dortsteht: var LastModDate=new Date(parent.frames[findMaxTime()].document.lastModified);

Falls du ein bischen an den Hintergründen interessiert bist:
Mit der Zeile var LastModDate=new Date(document.lastModified); wird ein neues Objekt vom Typ Date (das macht das Schlüsselwort "new") erzeugt, dem bei der Erzeugung der Wert von document.lastModified zugewiesen wird.
Mit new ruft man den sogenannten Konstruktor einer Klasse auf, dieser "erzeugt"ein neues Objekt. Im einfachsten fall wird mit new KlassenName() ein Objekt vom Typ KlassenName erzeugt, wobei dem Konstruktor keine Parameter übergeben werden. In diesem Fall wird das Objekt mit Standardwerten initialisiert.
Es gibt aber auch Konstruktoren, die man mit Parametern aufrufen kann. Dies geschieht hier: mit "new Date(document.lastModified)" wird der Konstruktor von Date mit dem Parameter "document.lastModified" aufgerufen (document.lastModified ist auch ein Date Objekt).
Im Konstruktor ist jetzt bestimmt "wenn ich mit einem Date Objekt als Parameter aufgerufen werde, so bekommt das Objekt das ich erzeuge den Wert des übergebenen Date Objektes". D.h. das neu erzeugte Objekt hat den selben Wert wie document.lastModified .
(Was ich hier ein bischen naiv formuliert habe heißt in Wirklichkeit überladen und ist ein extrem praktisches Werkzeug).

Ich hoffe es wahr verständlich (und interessant).
Jak

w_fuchs 17.11.2003 22:15

Thanks a lot

Mein Code schaut jetzt so aus:

Code:



<font size="1"><font face="Verdana, Arial, Helvetica, sans-serif">Aktualisiert
            am:</font>


            </font><font size="1" style="bold">
            <script language="JavaScript">
                <!-- Hide JavaScript from Java-Impaired Browsers
                // -->
                function initArray()
                {
                this.length = initArray.arguments.length
                for (var i = 0; i < this.length; i++)
                this[i+1] = initArray.arguments[i]
                }
                var DOWArray = new initArray("So","Mo","Di","Mi","Do","Fr","Sa");
                var MOYArray = new initArray("Jan","Feb","März","Apr","Mai","Juni","Juli","Aug","Sept","Okt","Nov","Dez");
                var LastModDate = new Date(parent.frames[4].document.lastModified);
                var Name = navigator.appName;
               
                document.write(DOWArray[(LastModDate.getDay()+1)],", ");
                document.write(MOYArray[(LastModDate.getMonth()+1)]," ");
                if ( Name == "Netscape" )
            {
                document.write(LastModDate.getDate(),", ",(LastModDate.getYear()+1900));
                }
                else
            {
            document.write(LastModDate.getDate(),", ",(LastModDate.getYear()));
            }
                </script>
            </font></p>

jetzt scheint gar kein Datum auf...

_m3 17.11.2003 23:55

Der Teil
Code:

if ( Name == "Netscape" )
{
document.write(LastModDate.getDate(),", ",(LastModDate.getYear()+1900));
}
else
{
document.write(LastModDate.getDate(),", ",(LastModDate.getYear()));
}

ist IMHO noch Verbesserungswürdig. Nachdem sich der IE nicht an die Sprachspezifikationen hält, musst Du dieses seltsame Konstrukt bauen.
Es geht aber einfacher mit:
Code:

document.write(LastModDate.getDate(),", ",(LastModDate.getFullYear()));
http://devedge.netscape.com/library/...e.html#1193607

jak 18.11.2003 11:45

mach mal nach der Zeile var LastModDate = new Date(parent.frames[4].document.lastModified);

ein alert(LastModDate); und schau was er ausgibt.

Jak

w_fuchs 18.11.2003 17:25

MsgBox kommt


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag