Verschiedenes

Zurück zum Script-DB Eingang



http://www.erleuchtet.kilu.de/Script-DB/index.htm




Automatismen

Onclick in Javascript



Onclick-Funktion in Javascript auslösen:

Ziel ist es, beim Klicken auf einen Verweis Aktionen mit eben diesem Verweis auszulösen, ohne die Onclick-Funktion in das HTML das Verweises hinein schreiben zu müssen.

Dazu muß JavaScript erst einmal wissen, um welchen Verweis es sich handelt. Dazu werden die Verweise auf der Seite gezählt, durchnumeriert und ihre Adressen und Zielfenster in zwei Arrays gespeichert.

Wird nun auf den HTML-Verweis geklickt, liest folgendes JavaScript die Nummer des Verweises aus, holt sich die zugehörige Adresse und Zielfenster aus den jeweiligen Arrays und öffnet die Seite.


var url;
var ziel;
var Orte = new Array();
var Ziele = new Array();

for (var i = 0; i < document.links.length; ++i)
{

var DocVerweis = document.links[i];

// Verweisnummer pnum selbst erteilt:
DocVerweis.pnum=i;

url = String(DocVerweis);
ziel = DocVerweis.target;

Orte[i] = url;
Ziele[i] = ziel;

// TEST:
// alert (Orte.length);
// alert (Orte[i]);
// alert (Ziele.length);
// alert (Ziele[i]);


function clicka()
{
var Verweisnummer = this.pnum;

// TEST:
// alert(this.pnum);
// alert("Verweisnummer: "+Verweisnummer);

// alert (Orte[Verweisnummer]);
// alert (Ziele[Verweisnummer]);

NeuesFenster = window.open(Orte[Verweisnummer], Ziele[Verweisnummer], "width = 400,height = 300,top = 50,left = 50,resizable = yes,scrollbars = yes,menubar = yes,location = yes,toolbar = yes,status = yes");

FensterFocus = NeuesFenster.focus();
}


DocVerweis.onclick = clicka;

}


Zu finden in:

http://www.erleuchtet.kilu.de/hilfe/autoform.htm




JS Indexnummern zuordnen




Indexnummern auslesen und zuordnen


JavaScript zählt automatisch alle HTML-Elemente durch und vergibt ihnen Indexnummern ab 0. Dadurch lassen sich einzelne Elemente mit ihrer Indexnummer ansprechen - nur welche ist das?

Folgendes Script liest die Indexnummern beliebiger HTML-Elemente einer Seite dynamisch aus und ordnet ihnen diese zu, so daß darauf zugegriffen werden kann, auch wenn der Aufbau der Seite nachträglich verändert wird. Jedes dieser Elemente kann später mit dieser Nummer identifiziert werden.


Zählt und gibt die Verweise aus:

<HTML>
<HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!--

// Bezieht sich hier auf alle A-Tags

function Indexzuordnen()
{
ElementAnzahl = document.getElementsByTagName("a").length;
alert ('Die Zahl der Verweise ist: ' + ElementAnzahl);
for (var i = 0; i < ElementAnzahl; i++)
{document.getElementsByTagName("a")[i].IN = i;}
}

function Anzeigen(IN)
{
alert("Meine Indexnummer ist: " + IN);
var MeinIndex = document.getElementsByTagName("a")[IN];
if (MeinIndex.title)
{window.status = 'TITEL ' + MeinIndex.IN + ' ist: ' + MeinIndex.title;}
else
{window.status = '';}
// Weitere Anweisungen;
}

// -->
</SCRIPT>

</HEAD>

<BODY OnLoad="Indexzuordnen();">

<H1>JS Indexnummern zuordnen</H1>

<P>

<A HREF="hilfe.htm" Title="Zur Hilfe"
onMouseOver="Anzeigen(this.IN); return true;" onFocus="Anzeigen(this.IN);
return false;">Hilfe</A>
<P>

<A href="impressum.htm" Title="Zum Impressum"
onMouseOver="Anzeigen(this.IN); return true;" onFocus="Anzeigen(this.IN);
return false;">Impressum</A>
<P>

<B>Verweise Zusammenfassen</B>

<P>

Zählt und gibt die Verweise aus:
<P>

----------

<P>
<BR>

<U>Wie viele Verweise gibt es auf der Seite</U>?

<SCRIPT LANGUAGE="Javascript">
<!--
document.write(document.links.length);
//--> </SCRIPT>

<P>
<U>Welche Verweise gibt es auf der Seite</U>?
<P>

<SCRIPT LANGUAGE="Javascript">
<!--
a = document.links.length;
for ( i=0; i<a; i++ )
{
document.write(document.links[i]);

document.write(" &nbsp; ");

document.write("<A HREF=\"");
document.write(document.links[i]);
document.write("\">");
document.write("Link" + (i+1));
document.write("</A>");

document.write("<BR>");
}
//--> </SCRIPT>

<P>

Internet Magazin 6/05 S. 31 ff
<P>


</BODY></HTML>

Neben dem Titel können in allen derartig ansprechbaren HTML-Elementen (d.h. auch DIV-Bereiche!) auch Id, Name oder andere Attribute abgefragt und jeweils mit allgemeingültigen Anweisungen verknüpft werden.

Allerdings müssen die verschiedenen HTML-Elemente getrennt von einander behandelt werden, um ein Überschneiden der ID-Nummern zu vermeiden.

---

Siehe:
http://www.erleuchtet.kilu.de/hilfe/autoform.htm





Verweise automatisch formatieren I



Verweise je nach Eigenschaften mit JavaScript und CSS formatieren:
(auch mit anderen HTML-Elementen möglich)


<HTML>
<HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!--

function AVerweis()
{

// Verweise durchsuchen

for (var i=0; i<document.getElementsByTagName("a").length; i++)
{

// Bedingungen finden

// NEU: Zur Prüfung wechselweise auskommentieren

if ((document.links[i].protocol == "http:") && (document.links[i].hostname != "
www.MEINEDOMAIN.de") && (document.links[i].hostname != "WEITERE DOMAIN"))
// if ((document.links[i].protocol != "http:"))


// Klasse zuweisen

{
document.links[i].className ='abc';
//Weitere Eigenschaften
}


else
{
document.links[i].className ='defg';
//Weitere Eigenschaften
}


}
}
// -->
</SCRIPT>


<style type="text/css">
<!--
/* Das gewünschte Format (Style) der Verweise muß noch hier auf der Seite oder extern in CSS festgelegt werden:
*/


.abc
{
CSS- Formate
}

/* Untergruppen */

a.abc {color:red}
a:visited.abc {Css-Formate;}
a:focus.abc {Css-Formate;}
a:hover.abc {Css-Formate;}
a:active.abc {Css-Formate;}



.defg
{
CSS- Formate
}

/* Untergruppen */

a.defg {color:green}
a:visited.defg {Css-Formate;}
a:focus.defg {Css-Formate;}
a:hover.defg {Css-Formate;}
a:active.defg {Css-Formate;}



Will man die CSS-Formatierung in eine zentrale Datei auslagern, kann eine eigene 'Klasse' vergeben werden:


if (document.links[i].title == "Bloedsinn")
{
document.links[i].className ='gruen';
}



Diese 'Klasse' wird dann beispielsweise in einer externen .CSS-Datei für alle HTML-Dateien formatiert:

/*
Grüne Verweise
*/

a.gruen {color: green}

/*
Weitere Verweis-Formatklassen, in DER Reihenfolge:
:visited
:focus
:hover
:active
*/

a.gruen {color:green;}
a:visited.gruen {color:red;}
a:focus.gruen {color:green;}
a:hover.gruen {color:green;}
a:active.gruen {color:green;}

/* ... Hier werden die Formate definiert ... */
-->
</style>

</HEAD>

<BODY onload="window.setTimeout("AVerweis()", 500);">

<H1>Verweise automatisch formatieren</H1>

<P>
<A HREF="hilfe.htm" Title="Zur Hilfe"
onMouseOver="Anzeigen(this.IN); return true;" onFocus="Anzeigen(this.IN);
return false;">Hilfe</A>
<P>
<A href="impressum.htm" Title="Zum Impressum"
onMouseOver="Anzeigen(this.IN); return true;" onFocus="Anzeigen(this.IN);
return false;">Impressum</A>
<P>

---

<P>


Achtung:

<P>

Die Funktion "AVerweis()" muß z.B. mit

<SCRIPT LANGUAGE="Javascript">
<!--
window.onload = window.setTimeout("AVerweis()", 500);
//--> </SCRIPT>

<P>

NACH dem Laden der Seite aufgerufen werden.

<P>

</BODY></HTML>



Verweise automatisch formatieren II



JavaScript zählt automatisch alle HTML-Elemente durch und vergibt ihnen Indexnummern ab 0, so daß auf sie zugegriffen werden kann, auch wenn der Aufbau der Seite nachträglich verändert wird.

Verweisen (Links) beispielsweise können so über CSS je nach Art mit folgender Funktion automatisch ein bestimmtes Format zugewiesen werden, wenn diese, wie hier, beispielsweise im Titel des Verweises zum Ausdruck gebracht wurde.


<HTML>
<HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!--
// Gilt für alle A - Tags, egal wie geschrieben

function linkformat()
{
for (var i = 0; i < document.getElementsByTagName("a").length; i++)
{
if (document.links[i].title == "Bloedsinn")
{
document.links[i].style.setAttribute("color", "green", false);
}
}
}

// -->
</SCRIPT>

</HEAD>
<BODY ONLOAD="linkformat();" text="black" link="blue" >

<P>
<A HREF="lala.htm" Title="Bloedsinn">Lala</A>

<P>

</BODY></HTML>



Will man die CSS-Formatierung in eine zentrale Datei auslagern, kann eine eigene 'Klasse' vergeben werden:


if (document.links[i].title == "Bloedsinn")
{
document.links[i].className ='gruen';
}



Diese 'Klasse' wird dann beispielsweise in einer externen .CSS-Datei für alle HTML-Dateien formatiert:

/*
Grüne Verweise
*/

a.gruen {color: green}

/*
Weitere Verweis-Formatklassen, in DER Reihenfolge:
:visited
:focus
:hover
:active
*/

a.gruen {color:green;}
a:visited.gruen {color:red;}
a:focus.gruen {color:green;}
a:hover.gruen {color:green;}
a:active.gruen {color:green;}


---

Ausführlicher:

Siehe:
http://www.erleuchtet.kilu.de/hilfe/autoform.htm




JS-Array automatisch nummerieren



Statt

a[1] = "yxz" ;
a[2] = "yxz" ;
a[3] = "yxz" ;
a[4] = "yxz" ;
a[5] = "yxz" ;


Das Array einfach selber hochzählen lassen:

i=0

a[i++] = "yxz" ;
a[i++] = "yxz" ;
a[i++] = "yxz" ;
a[i++] = "yxz" ;
a[i++] = "yxz" ;

(Aus: Internet Magazin)


Siehe auch:

"Verweise Zusammenfassen"





Verschiedene CSS Styles laden



Styles dienen u. a. dem Formatieren von Seiten, aber auch dem Positionieren von Elementen.

Sie können im HEAD angegeben oder extern abgelegt und aufgerufen werden.

<HTML>

<HEAD>

<link rel="stylesheet" type="text/css" href="abc.css">


----------


Unterschiedliche Stylesheets für verschiedene Browser angeben:


<SCRIPT LANGUAGE="JavaScript">
<!--

//Browser-Abfrage


if (netscape)
{
document.write("<link rel\=\"stylesheet\" type\=\"text\/css\" href\=\"ns.css\">")
}

else
if (MSIE)
{
document.write("<link rel\=\"stylesheet\" type\=\"text\/css\" href\=\"ms.css\">")
}

// -->
</script>



----------




JavaScript-Werte speichern



<html>

<head>

<title>Test</title>
</head>

<body>

<form action="SELBST.htm" method="POST" name="Kunde">
<p>&nbsp;</p>
<p><input type="text" size="20" name="Anrede"> </p>
<p><input type="text" size="20" name="Vorname"> </p>
<p><input type="text" size="20" name="Nachname"> <script
language="JavaScript" type="text/javascript">
<!--

function DieseAnzeigeAendern()
{
Anrede = document.forms.Kunde.Anrede.value;
Vorname = document.forms.Kunde.Vorname.value;
Nachname = document.forms.Kunde.Nachname.value;

alert ("Ihre Daten werden gespeichert");
alert (Anrede);
alert (Vorname);
alert (Nachname);


}

-->
</script> </p>
<p><input type="submit" name="KundenBL" value="Nehmen"
onclick="return DieseAnzeigeAendern();"> </p>
</form>

<p>Achtung: die Felder müssen tatsächlich existieren! </p>
</body>
</html>


Werte übertragung mit Opener



Sind Seiten aufeinander bezogen, öffnet beispielsweise eine Seite als "Opener" eine neue mit "window.open(...)", so kann ein Wert in der neu geöffneten(!!) Seite verändert, in die öffnende Seite -den "Opener"- zurückübertragen und dort genutzt werden.


In der neu geöffneten Seite:

<HTML>
<HEAD>

...


<SCRIPT type="text/javascript" language="JavaScript">
<!--

function WertAendern()
{
...
opener.NeuerWert = "1"; // !!
alert ("Der Wert ist jetzt " + opener.NeuerWert);
}

-->
</SCRIPT>


...

</HEAD>
<BODY onload="WertAendern();">
...

</BODY>
</HTML>

-------------------

-------------------


In der öffnenden Seite (opener):

<HTML>
<HEAD>

...


<SCRIPT type="text/javascript" language="JavaScript">
<!--

function IrgendwasAendern()
{
if (window.NeuerWert == "1") // !!
{
alert ("Das neue Fenster ist offen");
...
}
}

-->
</SCRIPT>

</HEAD>
<BODY>
...

</BODY>
</HTML>



Der neue oder geänderte Wert steht hier sofort zur Verfügung und kann auch von dieser Seite verändert werden.




Werte übertragung mit Search



<HTML>
<HEAD>
<TITLE>Test</TITLE>
</HEAD>
<BODY>
<P>
Einfach nur <A href="
Google
">http://www.google.de/search">Google

<P>
<A TARGET="_top" HREF="Test.html?q=Eins+Zwei=Drei">TEST</A><P>


<form name="GSuche" action="TEST.html" method="GET">
<!--

WICHTIG! Kein method="POST" !

-->
<p>
<input type="text" size="20" name="q" ></p>
<p>
<input type="submit" value="Nehmen"><br>
</form>

<!--

WICHTIG! Das folgende Script muß UNTERHALB der Links im BODY-Bereich eingefügt werden! Onload funktioniert nicht, da der Browser dann in eine neues Fenster schreibt.

-->


<SCRIPT type="text/javascript">
<!--


if (window.location.search)
{
alert(window.location.search);
var Kette = window.location.search;
var Abschnitt = Kette.split("?"); // beliebige Stelle
var Teile = Abschnitt[1];
alert(Teile);
if (Abschnitt[1])
{
for (var i = 0; i < document.links.length; ++i)
{
if ((Teile) && (document.links[i].search == ""))
{
document.links[i].search = "?" + Teile;

// Test:

document.write("<br> Die Google URL lautet jetzt: <p>" + document.links[i]);
}
}

}
}

// -->
</SCRIPT>

</BODY>
</HTML>

Da Formular-Werte mit GET in der URL (location) mit ?x=y&w=z übertragen werden und sich der Abschnitt mit split("&") und split("=") weiter zerlegen läßt, kann man so fast beliebige Wertepaare und damit Werte mit Java Script zwischen HTML-Seiten übertragen.


- - - - - -


Eine Anwendung kann man hier studieren (Hervorhebung der Ergebnisse einer Suchanfrage):

http://www.erleuchtet.kilu.de/hilfe/freef_d1.htm#2


- - - - - -


Ergänzung


Achtung: Die Datenübertragung mit JavaScript birgt einige Tücken.



1] Im alten MS Internet Explorer 6.0 setzt

"document.links[i].search=window.location.href"

kein Fragezeichen vor den search-Begriff und beantwortet die Abfrage

"alert(document.links[i].search)"

mit "[]", obwohl der Begriff (ohne trennendes Fragezeichen) bereits angeheftet wurde.


Abhilfe schafft, falls noch notwendig,

"document.links[i].search="?"+window.location.href"

- Das dann eigentlich doppelte Fragezeichen scheint in andern Browsern nicht zu stören.




2] In Google Chrome ist der Zugriff auf die URL, der die "search"- Komponente trägt, in einigen Fällen untersagt, so als

"parent.location.search"

in einem Frameset.

Das läßt sich auch nicht so ohne weiteres umgehen - und gilt auch für die Übertragung mit hash.




3] Das Löschen eines "search"- Parameters ist im MS Internet Explorer mit

{...location.search="";}

ohne weiteres möglich.

In Mozilla- Browsern bleibt jedoch das Eingangs-Fragezeichen "?" hinter der Seitenadresse unsichtbar (!) bestehen, so daß weitere Abfragen immer noch von einem bestehenden "search"- Objekt ausgehen.


Diese Fälle mit

{ if ((self oder parent.location.search != "") && (self oder parent.location.search != "?")) }

ausschließen.



Das entspricht übigens

{ if !((self oder parent.location.search == "") || (self oder parent.location.search == "?")) }

(einfache bzw. doppelte Negation bei und /oder!)





Werte übertragung mit Hash



Über

var parameter=location.hash

Seite 1.html:

<HTML>
<HEAD>
<TITLE> - Titel - </TITLE>
</HEAD>
<BODY>

Seite 1:

<P>

<A HREF="2.html#Mein Haus- mein Auto- mein Pferd" >Werte übertragen</A>

</BODY></HTML>

Seite 2.html:

<HTML>
<HEAD>
<TITLE> - Titel - </TITLE>
</HEAD>
<BODY>

Seite 2:

<P>

<SCRIPT type="text/javascript" language="JavaScript">
<!--

var parameter0 = location.hash;
var parameterwerte = parameter0.split("#");
var parameterwerte1 = parameterwerte[1].split("-");

// document.writeln(parameterwerte0);
document.writeln(parameterwerte1);

-->
</SCRIPT>

</BODY></HTML>


(Nach Internet Magazin 10/06)




Werte auf der Seite speichern




<HTML>
<HEAD>
<TITLE>Werte mit Hash auf der selben Seite speichern
</TITLE>
</HEAD>
<BODY>

<P>
Diese Seite als "seite_1.htm" speichern

<P>
<A NAME="Ja">Ja</A>,

<A HREF="seite_1.htm#Ja" Onclick="location.replace('seite_1.htm#Ja');location.reload();">ich
will das sehen</A>!

<A HREF="seite_1.htm#Nein" Onclick="location.replace('seite_1.htm#Nein');location.reload();">Nein, doch nicht</A>!

<P>

<SCRIPT language="javascript" type="text/javascript">
<!-- Hide script from older browsers
// alert (location.hash);

if (location.hash == "#Ja")
{
document.writeln ("Hallo");
}
// -->
</SCRIPT>

<P>
Ablauf:

- Klickt man auf den Verweis, wird ein vorher bestimmter Seitenanker aufgerufen und in der URL gespeichert
(dieser braucht nicht unbedingt auf der Seite zu existieren)

- Gleichzeitig wird die Seite mit dem neuem Anker als die aktuelle Seite gespeichert und neu geladen.

- Nun wird das "Hallo" angezeigt, weil der Anker in der Adresse vorhanden ist.

</BODY></HTML>





Werte in JS und PHP übertragen



Variablenübertragung zwischen JavaScript und PHP


Manchmal werden die selben Variablen sowohl im JavaScript wie im PHP-Bereich benötigt. Das Problem besteht darin, daß JavaScript auf dem Rechner des Klienten, PHP aber auf dem Server läuft und der Klient den Server nicht auslesen kann. Man kann jedoch eine serverseitig erstellte Variable clientseitig in Javascript auslesen.

Umgekehrt geht es auch, wenn man die Variablen für JavaScript und PHP im unterschiedlichen Syntax in einer gemeinsamen Text-Datei speichert.

Man läßt dabei in jeweils drei Schritten eine PHP-Variablen-Datei durch JavaScript auslesen oder umgekehrt:


----


A) Übertragung von PHP an JavaScript

- Vorteil: Kurz; Die Variablen bleiben dem Benutzer verborgen.
- Nachteil: Nur PHP-Seiten können darauf zugreifen.

(1) Speichern der Variablenwerte in PHP:
Eine hier 'PHP-WERTE.TXT' genannte Text-Datei auf dem Server enthält Werte in der Form:

<?PHP $MailAddresse = &quo
"jemand@irgendwo.de";?>

(2) Ausgelesen wird die PHP-Werte-Datei auf jeder PHP-Seite durch:

<?PHP include("PHP-WERTE.TXT"); ?>

(3) Darunter(!) geschieht die Übergabe der Werte von PHP an JavaScript:

<Script type="text/javascript">
<?PHP print "var MailAddresse ='$MailAddresse' \n"; ?>
</SCRIPT>


----


B) Übertragung von JavaScript an PHP

- In dieser Variante können auch .HTML-Seiten über JavaScript auf die Variablen zugreifen;
- Allerdings können diese jetzt von Benutzer eingesehen werden, da die Werte-Datei vom Browser gespeichert wird.

(1) Speichern der Variablenwerte in JavaScript:
Eine hier 'JS-WERTE.TXT' genannte Text-Datei auf dem Server enthält die
Werte diesmal in der Form:

var MailAddresse = &quo "jemand@irgendwo.de";
(2) Ausgelesen wird die JavaScript-Werte-Datei auf jeder beliebigen Seite
durch:

<SCRIPT language="JavaScript" type="text/javascript"
src="JS-WERTE.TXT"></SCRIPT>

(3) Auslesen der JavaScript-Werte-Datei durch PHP:
Dazu muß die Datei 'JS-WERTE.TXT' in PHP zeilenweise eingelesen und jede
Zeile mit "var" aufgeteilt werden in den jeweiligen Parameter und dessen
Wert:

<?PHP
$PHPWerteDatei = "JS-WERTE.TXT";
$Zeile = file($PHPWerteDatei);
$ZeilenZahl = count($Zeile);

for($vz=0; $vz < $ZeilenZahl; $vz++)
{
$EinzelZeile[$vz] = trim($Zeile[$vz]);

// SEHR WICHTIGE BEDINGUNG!
$VarPrf = strpos($EinzelZeile[$vz],"var ");
$SemiPrf = strrchr($EinzelZeile[$vz],";");

if ($VarPrf == "0" && $SemiPrf == ";" )
{
// PARAMETER-ZEILE SÄUBERN:
$Varray = array ("var " => "", "\"" => " ", ";" => "");

$EinzelZeile[$vz] = strtr ($EinzelZeile[$vz], $Varray);
$ArrayGueltigeZeile = explode("=",$EinzelZeile[$vz]);

if (count($ArrayGueltigeZeile) == 2 )
{
list($Parameter,$Wert) = $ArrayGueltigeZeile;
$Parameter = trim($Parameter);
$Wert = trim($Wert);
$ParameterWert = "$$Parameter = \"$Wert\"";
eval ("\$ParameterWert = $ParameterWert;");
}}

unset ($VarPrf);
unset ($SemiPrf);
}
?>

Aus "var MailAddresse" wird so "$MailAddresse".

Damit sind die JavaScript-Werte auch in einer nachfolgenden PHP-Anweisung verwertbar.


----


C) Übertragung von JavaScript an PHP über Formular

- In dieser Variante werden (ggf. ermittelte) JavaScript-Werte über ein (verstecktes) Formular einer .PHP-Datei zur Verfügung gestellt;
- Allerdings erst nach einem Neuladen der Seite.


<HTML>
<HEAD>

(1) In JavaScript wird festgehalten:

<SCRIPT language=JavaScript type=text/javascript>
<!--
var MailAddresse = &quo "jemand@irgendwo.de";// Dieser Wert wird ausgelesen, dann im Formular als Wert festgelegt und
// - Falls in PHP so nicht vorhanden -

function abschicken()
{
var Suchformular = document.forms["Mailen"];

alert (Suchformular.elements["MailAddresse"].value);

if (Suchformular.elements["MailAddresse"].value != MailAddresse)
{
Suchformular.elements["MailAddresse"].value = MailAddresse;
Suchformular.submit();
alert (MailAddresse + " abgeschickt");
}
}

// Nach dem Laden der Seite abgeschickt:
window.onload = abschicken;

// -->
</SCRIPT>

(2) Es folgt für die Übertragung der Formular-Werte in PHP

<?PHP
$MailAddresse=$_POST['MailAddresse'];
?>

</HEAD>
<BODY >
<P>

(3) Und das Formular mit der versteckten Eingabe:

<FORM NAME="Mailen" ACTION="<?php echo($_SERVER['PHP_SELF']); ?>" METHOD="POST" >
<INPUT TYPE="hidden" NAME="MailAddresse" Value="<?PHP echo "$MailAddresse"; ?>">
</FORM>

<?PHP
echo "MailAddresse: ";
echo $MailAddresse;
?>
</P>

</BODY>
</HTML>



- Beim Laden der Seite wird der (geänderte) JavaScript-Wert ausgelesen, ins Formular übertragen, verglichen, und als PHP-Wert an die eigene Seite geschickt

Aus "var MailAddresse" wird so "$MailAddresse".

Damit sind die JavaScript-Werte auch in einer nachfolgenden PHP-Anweisung verwertbar.


----


Eine Kombination von diesen Varianten ist möglich; die Variablen lassen sich auch während der Session vom Klienten neu schreiben.




Textdatei auslesen mit JavaScript



Text - Dateien mit JavaScript auslesen ist einfacher als oft angenommen wird.

Man muß dazu die Textdateien als Quelle (SRC) angeben und einige Regeln einhalten.

Es können mehrere Dateien ausgelesen werden, und ihre Endung muß nicht .TXT lauten.

Achtung: Als Variable am Anfang der Zeile darf keine reine Zahl stehen.


--------

Die Quellen:


werte4.txt:

VorName = "Paul";
Name = "Hufschmied";
PLZ = "444444";
Stadt = "Aka-aka";
Strasse = "Nüderweg";
Nr = "3";


werte5.txt:

Adressen = new Array("Paul","Hufschmied","Aka-aka","Nüderweg","3");
Meldung = "Achtung neue Adresse";

So = "Heute ist Sonntag";
Mo = "Heute ist Montag";
Di = "Heute ist Dienstag";
Mi = "Heute ist Mittwoch";
Do = "Heute ist Donnerstag";
Fr = "Heute ist Freitag";
Sa = "Heute ist Samstag";


--------


Die auslesende Seite:


<HTML>
<HEAD>
<TITLE> - Texte auslesen mit JS - </TITLE>

<!-- Liest die Werte aus -->
<SCRIPT language="JavaScript" type="text/javascript" src="werte4.txt"></SCRIPT>
<SCRIPT language="JavaScript" type="text/javascript" src="werte5.txt"></SCRIPT>

<SCRIPT language="JavaScript" type="text/javascript">
<!--
var jetzt = new Date();
var WochenTag = jetzt.getDay();
var Tag = new Array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");
// document.write(Tag[WochenTag] + " - ");
// -->
</SCRIPT>
</HEAD>

<BODY>
<P>
<B>Werte einlesen</B> - neu Adresse:<BR>(aus Werte4.txt)
<P>
<NOSCRIPT>!! Wenn Sie Javascript ausgeschaltet haben,
sehen Sie hier gar nichts !!</NOSCRIPT>
<P>
<SCRIPT language="JavaScript" type="text/javascript">
<!--
document.writeln("Vorname: " + VorName + "\<BR\>");
document.writeln("Name: " + Name + "\<BR\>");
document.writeln("PLZ: " + PLZ + "\<BR\>");
document.writeln("Stadt: " + Stadt + "\<BR\>");
document.writeln("Strasse: " + Strasse + "\<BR\>");
document.writeln("Nr: " + Nr + "\<BR\>");

SDT = eval(Tag[WochenTag]);
document.writeln("Hallo! Der Spruch des Tages lautet: \<I\>" + SDT + "\<\/I\>.");
// -->
</SCRIPT>

<P>
<B>Über Array:</B><BR>(aus Werte5.txt)
<P>

<SCRIPT language="JavaScript" type="text/javascript">
<!--
// WICHTIG:
document.writeln("Flexibel:\<BR\>");
document.writeln("\<BR\>"+Adressen[0]+" "+Adressen[1]+", "+Adressen[2]+", "+Adressen[3]+" "+Adressen[4]+".");
document.writeln("\<BR\>\<BR\>");

document.writeln("Einfach:\<BR\>");
for (var i = 0; i < Adressen.length; ++i)
{
document.writeln("\<BR\>" + Adressen[i] + " ");
}

alert(Meldung);
// -->
</SCRIPT>
<P>
- Diese Seiten werden dynamisch generiert und lassen sich nur
Ausdrucken, nicht speichern.
<P>
- Ihr Vorteil ist, daß sich Änderungen in den Werten einfach
und für viele Seiten gleichzeitig durchführen lassen.
<P>
- Ihr Nachteil, daß bei Fehlern in den Werten JavaScript einfach
kommentarlos gar nichts anzeigt.
<P>

<P>
<B>Die Werte:</B>
<P>
<object data="Werte4.txt" type="text/plain" width="300" height="100" >
</object>
<P>
<object data="Werte5.txt" type="text/plain" width="600" height="200" >
</object>
<P>
</BODY></HTML>

S. Auch:

http://www.erleuchtet.kilu.de/hilfe/mozilla1.htm#KM2




Datum auswerten mit JavaScript 1



Absolute (epochale) Zeit:

JavaScript rechnet die absolute Zeit in Millisekunden seit Neujahr 1970 (GMT), gerechnet als Jahr, Monat, Tag, Stunde, Minute, Sekunde.

Zur Übung:


<HTML>
<HEAD>
<TITLE> - 2000 - </TITLE>
</HEAD>
<BODY>
<P>
Absolute (epochale) Zeit:
<P>
JavaScript rechnet die absolute Zeit in Millisekunden seit Neujahr 1970 (GMT), gerechnet als Jahr, Monat, Tag, Stunde, Minute, Sekunde.
<P>
(Achtung: Der Januar ist der Monat 0, Dezember 11)
<P>
Für den 1.1.2000 0:00 wären das:
<P>
<FONT COLOR=RED>
<SCRIPT language="JavaScript" type="text/javascript">
<!--
var ZeitenWende = new Date(2000,0,0,0,0,0);
VergZeitInMS = ZeitenWende.getTime();
document.writeln(VergZeitInMS);
// -->
</SCRIPT>
</FONT>
Millisekunden.
<P>
Man kann diese ebenso präzise wieder zurückrechnen. Ausgegeben wird Jahr, Monat, Tag, Stunde, Minute, Sekunde - plus örtliche Differenz zu GMT:
<P>
<FONT COLOR=RED>
<SCRIPT language="JavaScript" type="text/javascript">
<!--
var ZeitPunkt = new Date();
ZeitPunkt.setTime(VergZeitInMS);
document.writeln(ZeitPunkt);
document.writeln(ZeitPunkt.getTimezoneOffset());
// -->
</SCRIPT>
</FONT>
Minuten. Und da liegt schon die erste Tücke. Aber egal, man soll ja damit ZeitDIFFERENZEN rechnen können. Gerechnet werden die Wochentage mit 0 für Sonntag bis 6 für Samstag:
<FONT COLOR=RED>
<SCRIPT language="JavaScript" type="text/javascript">
<!--
document.writeln(ZeitPunkt.getDay());
document.writeln(ZeitPunkt.getMonth());
document.writeln(ZeitPunkt.getDate());
document.writeln(ZeitPunkt.getFullYear());
document.writeln(ZeitPunkt.getMinutes());
document.writeln(ZeitPunkt.getSeconds());
// -->
</SCRIPT>
</FONT>
<P>
- Eben nicht. Die lokale Zeit wird korrekt ausgegeben, wenn man die Differenz ausgleicht; in diesem Fall aber keine 60 Minuten (wie behauptet), sondern 24 Stunden (wie festgestellt):
<P>
<FONT COLOR=RED>
<SCRIPT language="JavaScript" type="text/javascript">
<!--
var ZeitenWende = new Date(2000,0,0,24,0,0);
VergZeitInMS = ZeitenWende.getTime();
ZeitPunkt.setTime(VergZeitInMS);
document.writeln(ZeitPunkt);
document.writeln(ZeitPunkt.getDay());
document.writeln(ZeitPunkt.getMonth());
document.writeln(ZeitPunkt.getDate());
document.writeln(ZeitPunkt.getFullYear());
document.writeln(ZeitPunkt.getMinutes());
document.writeln(ZeitPunkt.getSeconds());
// -->
</SCRIPT>
</FONT>
<P>
<P>
Das Ganze in UTC (auf GMT bezogen) d.h. abzüglich der einen Stunde Differenz, wären:
<P>
<FONT COLOR=RED>
<SCRIPT language="JavaScript" type="text/javascript">
<!--
var Abzug = ZeitPunkt.getTimezoneOffset();
var ZeitenWendeUTC = (Date.UTC(2000,0,0,0,Abzug,0));
// enstpricht (2000,0,0,-1,0,0) - wenn man's weiß!
document.writeln(ZeitenWendeUTC);
// -->
</SCRIPT>
</FONT>
Millisekunden.
<P>
Man kann auch diese ebenso präzise wieder zurückrechnen (die angebliche Differenz zu GMT ignorieren):
<P>
<FONT COLOR=RED>
<SCRIPT language="JavaScript" type="text/javascript">
<!--
var ZeitPunkt = new Date();
ZeitPunkt.setTime(ZeitenWendeUTC);
document.writeln(ZeitPunkt);
document.writeln(ZeitPunkt.getDay());
document.writeln(ZeitPunkt.getMonth());
document.writeln(ZeitPunkt.getDate());
document.writeln(ZeitPunkt.getFullYear());
document.writeln(ZeitPunkt.getMinutes());
document.writeln(ZeitPunkt.getSeconds());
// -->
</SCRIPT>
</FONT>
<P>
</BODY></HTML>



In / mit DOS:

http://www.erleuchtet.kilu.de/hilfe/km-hist.txt




Datum auswerten mit JavaScript 2


Datum auswerten, Tag, Jahr und Monat bestimmen, x Tage kalendarisch zurückrechnen,
Tage, Monate und Jahre addieren und subtrahieren:

<P>

<script type="text/javascript">
<!--

var Wochentag = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
var Monate = [ 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' ];

var HEUTE = new Date();

document.write("<P>");
document.write("<P>--------------");

document.write("<P>Zahl der Tage im 2. Monat im Jahre 2005 = ");
document.write(new Date(2005,2,0).getDate()); // (=28)

document.write("<P>--------------");
document.write("<P>");

document.write("<P> HEUTE ist: &nbsp; " + HEUTE );

var HeutigerTag = HEUTE.getDay();

document.write("<P>--------------");

var TageInDMonat = new Date(HEUTE.getFullYear(),HEUTE.getMonth()+1,0).getDate();

var DHeutigesDatum = HEUTE.getDate();
document.write("<P> Datum Heute: " + DHeutigesDatum);

var DFrueheresDatum = HEUTE.getDate()-1;
document.write("<P> Datum Gestern: " + DFrueheresDatum);

document.write("<P>");
document.write("<P> Dieser Monat = " + Monate[HEUTE.getMonth()+1]);
document.write("<P> Dieses Jahr = " + HEUTE.getFullYear());
document.write("<P> Wochentag = " + HeutigerTag);
document.write("<P> Wochentag = " + Wochentag[HeutigerTag]);
document.write("<P> Zahl der Tage in diesemMonat = " + TageInDMonat);

document.write("<P>");

// Bei komplexen Ausdrücken immmer mit EVAL,
// da sonst die Jahreszahl als Text interpretiert und die 1 hinten dran gesetzt wird.

var NaechstesJahr = eval(HEUTE.getFullYear()+1);
document.write("<P>Nächstes Jahr: ");
document.write(NaechstesJahr);
document.write("<P>");

document.write("<P>------------");
document.write("<P>");

//

document.write("<P>");

var FrueheresDatum = new Date(new Date().setDate(HEUTE.getDate()-35));

document.write("<P>");

// Datum vor 35 Tagen:

document.write("<P>HEUTE vor 35 Tagen: ");

document.write("<P>");
document.write(FrueheresDatum);

document.write("<P>");
var PFrueheresDatum = new Date(new Date().setDate(HEUTE.getDate()-35)).getDate();

document.write("<P>HEUTE vor 35 Tagen als Tag: &nbsp; ");
document.write(PFrueheresDatum);

document.write("<P>");
var MFrueheresDatum = new Date(new Date().setDate(HEUTE.getDate()-35)).getMonth()+1;

document.write("<P>HEUTE vor 35 Tagen als Monat: ");
document.write(MFrueheresDatum);

document.write("<P>");
var YFrueheresDatum = new Date(new Date().setDate(HEUTE.getDate()-35)).getFullYear();

document.write("<P>HEUTE vor 35 Tagen als Jahr: ");
document.write(YFrueheresDatum);
document.write("<P>");


// ------------------------------


// Parse date -
// Prüfen, ob eine Datumsangabe gültig ist (ob es als reales Datum existiert)
// (auch Schaltjahr)

// Datum:

var Monat="02"; // Februar
var Tag="30";
var Jahr="2000";

// Schreibe das Datum JS- lesbar:

var PruefDatum = Monat+"/"+Tag+"/"+Jahr;

// convert it into a date instance
// Parse Pruefdatum:
var DT = new Date(Date.parse(PruefDatum));

// Bis hier wird noch jeder Unsinn als Datum ausgeworfen,
// da JavaScript einfach nur die Zahlen addiert:

alert(DT);


// check the components of the date
// since Date instance automatically rolls over each component

// Teile das PruefDatum wieder in seine Komponenten auf:
var arrDateParts = PruefDatum.split("/");

// Vergleicht Parse_PruefDatum mit Split_PruefDatum!

if ((DT.getMonth() == arrDateParts[0]-1 &&
DT.getDate() == arrDateParts[1] &&
DT.getFullYear() == arrDateParts[2]))

{alert("OK");}

else{alert("UNGÜLTIGES DATUM");}



//-->
</script>



Verzeichnis anzeigen lassen



<a href="../">Home</a>

Macht was ganz interessantes:

Im Netscape: Öffnet das Verzeichnis und zeichnet die Verzeichnisstruktur auf- listet alle Dateien auf; linkfähig.

MSIE: Dialogbox zur Verzeichnisstruktur wird geöffnet.

S. home.htm oder dir.htm


Auch: <A HREF="">siehe da!</A>

Öffnet das Verzeichnis*

* Aber nur, wenn keine weiteren JavaScript- Befehle enthalten sind. Auf diese Weise kann man auch einen "leeren" Verweis gezielt dazu benutzen, einen JavaScript- Befehl auszulösen:

<a href="" onClick="WasAuchImmer;return false">Klicken Sie hier!</a> // Achtung - kann eine Fehlermeldung auslösen

Möglich ist auch

<a href="#" onClick="WasAuchImmer;return false">Klicken Sie hier!</a>

---

Leere Verweise:

<A HREF="" >Hier klicken!</A>
kann eine Fehlermeldung auslösen

Sicherer:

<A HREF="#" onClick="...">
Hier klicken!</A>

oder:

<A onClick="...">
Hier klicken!</A>





Index-Kaskade




Index-Kaskade


Achtung! In jedes Verzeichnis, auch in jedes Unterverzeichnis(!), gehört eine [ggf. auch leere] Datei namens "index.html" oder "index.htm"; sonst kann das Verzeichnis eingesehen werden.


Mit dem Inhalt:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>

<META HTTP-EQUIV="REFRESH" CONTENT="1; URL=../index.html">
</HEAD>
<BODY>
<P align=center><BR><BR><BR><BR><BR><BR><BR><BR><BR>Kein Zugang</P></BODY></HTML>


wird der Zugreifende immer ein Verzeichnis weiter nach oben geschoben.



Mit <META HTTP-EQUIV="REFRESH" CONTENT="1; URL=../oberverzeichnis/unterverzeichnis">

wieder zurück in das Unterverzeichnis, das dem Benutzer offen stehen soll.



---


Allerdings muß die .htaccess richtig eingestellt sein (wenn vorhanden). Mit dieser lassen sich auch (IP-)Adressen sperren:

deny from .b-misc.de
deny from .b-123.45.678.22.





Automatisches Rechnen




Automatisch berechnendes HTML-Formular


- Oft wird ein HTML - Formular benötigt, das - wie MS Excel oder andere Kalkulationstabellen, Libre Office Calc u. dgl. - neue Eingaben sofort verarbeitet und das Ergebnis berechnet und auswirft.

- Hier soll versucht werden, das Ganze in den vier Grundrechnungsarten in reinem JavaScript hinzubekommen.

- Das Java Script dazu ist relativ einfach, beinhaltet aber ein paar Tricks: Eine manuelle Feld-Eingabe in JavaScript simulieren, feststellen, welches gerade das aktuelle Feld ist, usw.

- Es muß für die Rechnung das englische Zahlenformat jeweils in das deutsche umgewandelt werden -und für die anschließende Darstellung wieder zurück

- Dazu das Folgende kopieren und als HTML-Datei speichern:



<HTML>

<HEAD>

<SCRIPT language="JavaScript" type="text/javascript">
// <!---

// Einstellungen (selbsterklärend)

var AnfangsFeld = 0;
var Kommastellen = 2;


// Das Folgende ausschalten, wenn sich Vorgaben in den Feldern auf der Seite befinden:
var Anfangsanzeige = "0000";



// Default
// Ergebnisfelder nullen:

function nullen()
{
var l = document.getElementsByTagName("INPUT").length;

for (var i=0;i<(l);i++)
{

if (document.getElementsByTagName("INPUT")[i].readOnly != true)
{
document.getElementsByTagName("INPUT")[i].focus();

// Das Folgende ausschalten, wenn sich Vorgaben in den Feldern auf der Seite befinden:
document.getElementsByTagName("INPUT")[i].value = Anfangsanzeige ;
}

}

// Wichtig
// Simuliert eine Eingabe im Anfangsfeld, um die erste Berechnungskaskade auszulösen
// onchange kleingeschrieben!
document.getElementsByTagName("INPUT")[AnfangsFeld].onchange();
}



// Zahlen umwandeln
// Bei englischem Zahlenformat - 10,000.00 - überflüssig

// Vorgaben

var regex_dot = /\./g;
var regex_comma = /\,/g;


// Mache englisches Zahlenformat
function MEWERT(val)
{
val = parseFloat(val.value.replace(regex_dot,'').replace(regex_comma,'.'));
return val;
}

// Und wieder rückgängig machen

// Mache deutsches Zahlenformat
function MDwert(x)
{
x = x.toLocaleString();
x = x.replace((regex_comma,'_').replace(regex_dot,',')).replace('_','.');
return x;
}


function berechne(ausdruck)
{
ausdruck = MDwert(parseFloat(eval(ausdruck).toFixed(Kommastellen)));

// Versuch Fehlermeldung Abfangen 1
// if (isNaN(eval(ausdruck)) && (isNaN(eval(ausdruck)) != false)) // FF
// {ausdruck = "Fehler" ;}

// Teilung durch Ganzzahl prüft ob Zahl
// if (isNaN((ausdruck/10000)) == true) // MSIE
// {ausdruck.style.color = "red";}

return ausdruck;
}



// Aktualisiere alle Felder nacheinander
// y= this.name
// Der Feldname muß eindeutig sein - sonst mit ID arbeiten


function Aktualisiere(y,z)
{
var l = document.getElementsByTagName("INPUT").length;

for (var i=0;i<(l);i++)
{

// Suche das aktuelle Element
if (document.getElementsByTagName("INPUT")[i].name == y)
{
// Gehe z Felder weiter mit dem Focus
document.getElementsByTagName("INPUT")[i+z].focus();
}


// Nach jeder Berechnung springt der Fokus wieder in das erste Feld
// Setze Focus wieder auf das Anfangsfeld
document.getElementsByTagName("INPUT")[AnfangsFeld].focus();
document.getElementsByTagName("INPUT")[AnfangsFeld].select();
}


// Versuch Fehlermeldung Abfangen 2
// Trotz Eindeutigkeit: getElementsByName(y)[0] = erstes Element mit diesem Namen

// Teilung durch Ganzzahl prüft ob Zahl (für MSIE)
if ((isNaN(document.getElementsByName(y)[0].value/10000) == true) || (isNaN(document.getElementsByName(y)[0].value) == true))
{
// document.getElementsByName(y)[0].value = "Fehler" ;
document.getElementsByName(y)[0].style.color = "red";
}

}


// -->
</SCRIPT>


</HEAD>

<BODY onload="nullen();">
<P>

- Die Funktion nullen() setzt nur alle Felder zu Beginn aus einen vorbestimmten Wert, wenn diese keinen Anfangswert (value) vorgegeben haben.
<P>

- Die Funktion Aktualisiere(y,z) hat zwei Aufgaben:
<P>

* Einmal um festzustellen und zu bestimmen, welches gerade das aktuelle Element ist, das die Funktion auslöst; dazu holt sie sich mit (y) = (this.name,...) den Namen des auslösenden EINGABE-Feldes und löst die nächste Aktion durch Verlegen des Fokus von dort auf das vorgesehene nächste Berechnungs- oder ERGEBNIS- Feld auf, wo wiederum der Fokus mit (onFocus...) die Neuberechnung des Feldes auslöst, dann den Sprung zum nächsten Ergebnisfeld, und immer so weiter - bis zum letzten.

[Siehe dazu auch hier: Indexnummern auslesen und zuordnen]

<P>
* Zum Anderen ist nicht immer das allernächste Feld in der Reihe auch eine Ergebnisfeld - und so holt sie sich mit (z) die Anzahl der Felder, die der Fokus zum nächsten nächsten Berechnungs- oder ERGEBNIS- Feld springen muss. Ein reines Eingabefeld anzuspringen ist nicht sinnvoll; diese sollen also übersprungen werden.
<P>

- Die Funktion berechne(ausdruck) berechnet den Rechenausdruck, der zu dem Feld geschrieben wurde, und gibt das Ergebnis (mit MDwert in deutscher Notation) zurück.
<P>

- Die Versuche Fehlermeldung Abzufangen 1 und 2 sind rein optischer Natur und eigentlich überflüssig; sie sollen die von Browser zu Browser unterschiedlichen Fehlermeldungen abfangen, wenn der Benutzer falsche Eingaben macht. Man könnte dieses Problem auch lassen oder durch Beschränkung der Eingabe auf Zahlen und Kommata lösen.
<P>

Ein andermal. Wichtig ist hier nur die Konstruktion 'document.getElementsByName(y)[0]', die bei der Suche nach dem Element mit dem eigenen Namen genau das erste Element mit diesem Namen findet - hier also das einzige - denn beim Name könnten es ja mehrere sein.
<P>

Die daraus folgende etwas erratische Farbgebung von Fehlern, Tausender- und Dezimalzahlen ist der unterschiedlichen Fehlerbehandlung der Browser in deutscher Sprache geschuldigt, welche auch dazu zwingt, die Tausender- Trennzeichen (Punkte) und Dezimal- Trennzeichen (Kommas) für die Berechnung im englischsprachigen Java Script umzutauschen.
<P>

<FORM method="post" target="_self" name="tmp">
<P>

Bestätigen der Eingabe durch Weiterspringen mit der [Umschalt] - Taste, oder durch Klicken in das nächste Eingabefeld.
<P>

Die Seite neu laden mit [F5] oder [Strg]+[F5] - je nach Browser.
<P>


Erste Eingabe:
<P>

[-EINGABE-Felder haben Tabindex, Onfocus und Onchange zur Aktualisierung]
<P>

[-Die Eingabereihenfolge wird durch Tabindex erzwungen - und zwar unabhängig von der Verarbeitungsreihenfolge]
<P>

<INPUT name="A1" tabindex="1" class="write" onfocus="this.select();" onchange="Aktualisiere(this.name,2);" type="text">
<P>

Zweite Eingabe:
<P>

<!-- Aktualisiere(y,z) - y findet den Element-Namen - dieser muß eindeutig sein - z = Sprungzahl zum nächsten ERGEBNIS-Feld -->

<INPUT name="B2" tabindex="2" class="write" onfocus="this.select();" onchange="Aktualisiere(this.name,1);" type="text">
<P>


Erstes Ergebnis: C = A x B
<P>

<!-- ERGEBNIS-Felder sind readonly und haben Onfocus zur Berechnung sowie zur Aktualisierung -->
<P>

<INPUT name="C3" readonly="true" class="readonly" onfocus="this.value=berechne((MEWERT(tmp.A1))*(MEWERT(tmp.B2)));Aktualisiere(this.name,1);" type="text">
<P>


Zweites Ergebnis: D = C x 2
<P>

<!-- Die Einbeziehung der Werte aus den Feldern folgt im Deutschen immer dem Schema (MEWERT(tmp.FELDNAME) -->

<!-- Sollen Werte aus vorherigen Feldern nur übernommen werden, muß das Schema lauten: berechne((MEWERT(tmp.FELDNAME))*1) -->

<INPUT name="D4" readonly="true" class="readonly" onfocus="this.value=berechne((MEWERT(tmp.C3))*2);Aktualisiere(this.name,2);" type="text">
<P>


Dritte Eingabe:
<P>

<INPUT name="D5" tabindex="3" class="write" onfocus="this.select();" onchange="Aktualisiere(this.name,1);" type="text">
<P>


Drittes Ergebnis: F = (D - E) * 100
<P>

<!-- Bei komplexen Ausdrücken die Klammer-Regeln beachten! -->

<INPUT name="D6" readonly="true" class="readonly" onfocus="this.value=berechne(((MEWERT(tmp.D4))-(MEWERT(tmp.D5)))*100);Aktualisiere(this.name,1);" type="text">
<P>

<!-- Dieses letzte (versteckte) Eingabefeld dient u. a. dazu, die Ausführung des Scriptes zu unterbrechen -->

<INPUT name="Ende" type="hidden">
<P>

</FORM>
<P>


Das Ganze ausgeführt hier:
<P>


http://www.erleuchtet.kilu.de/rechner/xlrechner.htm

<P>

</BODY> </HTML>




Automatisch Download starten



<meta http-equiv="Refresh" content="1; url=
">http://www.meindomain.com/xy.zip">

Ihr Browser sollte das Herunterladen automatisch beginnen. Wenn er es nicht tut, klicken Sie

<a href="hier">http://www.meindomain.com/xy.zip">hier

um die Datei herunterzuladen.

Mails vorformulieren






Mails vorformulieren


<A HREF
HREF="mailto:wem@wo.de?subject=Ruecklauf&cc=wemnoch@wonoch.com&body=Hallo!">

Die Zeichenfolge %0A%0A erzeugt einen Zeilenumbruch ( nicht im Netscape 4x ).









Favicon-Pfad



Favicon

Wenn man ein 16x16 oder 32x32 - Pixel - Icon unter dem dem festen Dateinamen (kleingeschrieben) 'favicon.ico' in jedem Verzeichnis ablegt, wird dieses im Microsoft Internet Explorer 5, Mozilla und anderen Browsern in den Lesezeichen dargestellt ( S.
http://www.favicon.de )

So weit die Theorie.


Die Praxis:

* Das Favicon muß für jede Datei spezifisch angegeben werden, dann geht's.

* Dann kann aber für jede Seite (jedes Thema) ein eigenes angegeben werden, mit unterschiedlichen Namen, aber der Endung '.ICO'.


Die Ansprache lautet dann:
(Favicon-Pfad erzwingen)


<HTML>
<HEAD>

<link rel="shortcut icon" href="http:// ...xyz.ico">


---------


Den Favicon-Pfad in JavaScript schreiben lassen


[Das Folgende gilt für jede beliebige eigene URL, bei immer gleichem Unter-Verzeichnis;
Auf diese Weise kann man in JavaScript den Pfad zum aktuellen Ordner feststellen lassen]


<HTML>
<HEAD>

<SCRIPT LANGUAGE="JavaScript">
<!--


if (window.location.protocol == "http:")
{

// Von: http://www.web-toolbox.net/webtoolbox/diverses/ordnerinhalte.htm

var myloc = window.location.href;
var locarray = myloc.split("/");
delete locarray[(locarray.length-1)];
var arraytext = locarray.join("/");


var Pfad = arraytext;
var UnterPfad = "unterverzeichnis/favicon.ico";
var FaviconPfad = Pfad + UnterPfad ;

document.write ('<LINK rel\=\"shortcut icon\" href\=\"' + FaviconPfad + '\"\>');

// alert (FaviconPfad);

}


// -->
</SCRIPT>

</HEAD>





Editieren

Frameset_No Frames



Die Frameset - Seite

Zwischen die <NOFRAMES> </NOFRAMES> - Tags eines Framesets paßt eine ganze HTML-Seite!

Man sollte da für die Suchmaschinen Verweise einbauen; ggf. paßt eine ganze Startseite für framelose Browser hinein; diese startet dann als Alternative automatisch.

Es genügt also eigentlich, in die allgemeine Start- Seite 'index.htm' den <BODY> - Bereich in einen <NOFRAMES> einzubinden und den <FRAMESET> - Bereich oben drüber zu kleben.




Extra Script & Seiten-Ident



Grundsätzlich sollte man Java Script möglichst auslagern.

Änderungen und Ergänzungen lassen sich so leichter durchführen.

Und wenn eine Seite ohne Java Script - Datei offline betrachtet werden kann, dann gibt es auch weniger Ärger.

---

Will man nun auf einzelnen Seiten unterschiedliche Vorgänge ablaufen lassen, kann man das über den Seitennamen (für bestimmte Bereiche) oder einen eigens kreierten Ident-Namen steuern.

Dazu auf jeder Seite in PHP oder JavaScript dieser Seite einen eigenen Ident-Namen vergeben, z.B.:

IdentNamen = "Kontaktformular";

Dann lassen sich mit

if (IdentNamen == "Kontaktformular")

feste Scripte je nach Seite variieren.



---


Diese Auslagerungs-Dateien: "XYZ.JS"
- wie auch "XYZ.CSS" - kann man mit "A_" oder "0-" (Null) beginnen lassen, um sie am Anfang eines Verzeichnisses zu sammeln.




Fenstername



Um beim Editieren von Frames den Namen einer Seite / eines Rahmens zu erkennen:

<P>
<script type="text/javascript">
<!--
document.write("Fenster Window-Name: " + window.name);
//-->
</script>
<P>





Suchmaschinen u. a.

Meta -Tags




META - Tags


'META http-equiv' nur bei 'charset' und anderen HTML- Funktionen!


<META HTTP-EQUIV="CONTENT-Type" CONTENT="text/html; charset=iso-8859-1" >


Sonst: 'META NAME'!

Datum / Sprache:

<META NAME=date CONTENT=1999 - 06 - 21 T 09:25:37 + 00:00> ( = Abweichung zu Greenwich )

<META NAME="language" CONTENT="de"> Sprache


META DESCRIPTION (Inhaltsbeschreibung) immer angeben, denn das wird in den Suchmaschinen dem Anwender als Beschreibung angezeigt - wenn.

<META NAME="description" CONTENT="Die Seite über MICH">


---------


Weitere mögliche META -Tags, die aber nicht unbedingt von Suchmaschinen oder anderen Robots ausgewertet werden - womöglich aber von eigenen.

<META NAME="Keywords" CONTENT="Webdesign, Web Design, Service, kostenlos, günstig">


<META NAME="Audience" CONTENT="Alle">

<META NAME="Author" CONTENT="Ali Bengali">

<META NAME="Copyright" CONTENT="Ali Bengali 1999">

<META NAME="Language" CONTENT="Deutsch">

<META NAME="page-topic" CONTENT="HTML-Formular">

<META NAME="Revisit" CONTENT="After 1 days">

<META NAME="Title" CONTENT="Webdesign auf professionelle Weise">





Kommentare für interne Suche


Man kann in HTML Kommentare für interne Suche verwenden:

(aus der ZEIT )

<html>
<!-- ARTIKEL:JA -->
<!-- plazierung:R3 -->
<!-- rahmen:- -->
<!-- teasertitel:No future im Paradies -->
<!-- linktitel:Neuseeland hat die höchste Selbstmordrate unter Jugendlichen -->
<!-- teaser:Neuseeland macht uns angeblich vor, wie man den Sozialstaat reformiert. Und hat heute die höchste Selbstmordrate unter Jugendlichen der westlichen Welt. -->
<!-- titel:No future im Paradies -->
<!-- distribution:aktuell -->
<!-- autoren: -->
<!-- ausgabe:30 -->
<!-- jahr:1998 -->
<!-- erscheinungsdatum:19980716000000 -->
<!-- ressort: -->
<!-- rubrik:FreiZEIT -->
<!-- bild_1: -->
<!-- email: -->
<!-- serie: -->
<!-- channel:freizeit -->

<Body>

usw.

Diese Stichworte werden einerseits in HTML nicht angezeigt, andererseits können sie mit Suchroutinen, internen Suchmaschinen oder Textbloggern ausgewertet werden:

http://erleuchtet.kilu.de/hilfe/tl-demo.htm



Für die Suchmaschinen



Für die Suchmaschinen:


* Web-Seiten nicht mit Frames oder JavaScripts beginnen lassen, das verwirrt die Web- Roboter /Spider.


* Viele Suchmaschinen sortieren Ergebnisse alphabetisch. Titel danach ausrichten.


* Suchmaschinen beis Seiten mit Frames suchen zuerst in den Framesets und finden dort nichts. Deshalb gehört in den NOFRAMES - Bereich eine Beschreibung oder Zusammenfassung der Seite.

Titel und Keywords in Frameset nicht vergessen!


* Versteckte Verweise:

Brückenseiten werden benötigt, um die Präsenz in den Suchmaschinen zu erhöhen. Dabei wird gern übertrieben. Doch Brückenseiten sind schnell erkannt. Denn typischerweise gibt es nirgendwo einen Link, der auf eine solche Seite verweist. Abhilfe schafft ein unsichtbarer Verweis.

<a href="/eingang/seite34.htm"></a>

Dieser Link wird nicht angezeigt, doch Suchmaschinen folgen ihm.

Von:
http://www.ideenreich.com/tricks10.shtml

Ansonten: Suchmaschinen suchen nach Links mit sinnvollem Inhalt!







Robots I




Robots


Es ist durchaus möglich, Seiten für Suchmaschinen zu SPERREN!

Meta Name="Robots" Contents="NOINDEX"


----


<META NAME="Robots" CONTENT="INDEX, FOLLOW">

<meta name="ROBOTS" CONTENT="all">

läßt dagegen alle Suchmaschinen-Roboter alle Seiten durchsuchen





Robots II



Robots.txt

Suchmaschinen arbeiten in der Regel mit Robotern, die Web - Seiten durchforsten und die gefundenen Informationen auswerten. Dies können Sie sich bei Bedarf zunutze machen, um genau das Gegenteil zu erreichen, nämlich um Roboter auch auszusperren. Dazu erstellen Sie eine einfache Textdatei mit dem Namen robots. txt.

In diese Datei schreiben Sie die Informationen, die dem Roboter gewissermaßen als interne Hausordnung dienen. "User-agent" bezeichnet dabei den Roboter selbst, "Allow" steht für die erlaubten Verzeichnisse, "Disallow" entsprechend für die verbotenen.

Eine entsprechende Datei könnte also wie folgt aussehen:

User-agent "altavista"
Disallow "/privat"

Um alle Roboter anzusprechen, verwenden Sie " * ", um alle Verzeichnisse zu erlauben oder zu verbieten, verwenden Sie ebenfalls " * ". Wenn Sie beispielsweise alle Roboter komplett ausladen möchten, sieht dies wie folgt aus:

User-agent "* "
Disallow "*"

Beachten Sie dabei, daß jede Anweisung in einer separaten Zeile stehen muß.
Die Datei robots. txt

überspielen Sie anschließend in das Wurzelverzeichnis Ihres Servers.





Cookies




Cookies

Cookies in Netscape löschen: Cookies.txt löschen




Cookies und local Storage

Seit HTML5 werden Cookies durch den lokalen Datenspeicher "localStorage" abgelöst.

Die Einträge sind auch hier den einzelnen Webseiten zugeordnet.


Verwaltet und gelöscht werden auch diese Dateien über die Cookies- Funktion,

z.B.: im Mozilla Firefox:

Extras / Einstellungen / Cookies

Achtung: Nicht alle Einträge werden auch als Cookies angezeigt, aber mit "Alle Cookies löschen" werden dennoch sämtliche Einträge in der ganzen Datenbank gelöscht!