• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Problem Frameseite wechseln mit unterschiedlichen SetInterval-Verzögerungen

ApproXGmbH

New member
Hallo zusammen,
in einem Frameset soll der Hauptframe unterschiedliche Seiten mit unterschiedlicher Verzögerung
wechselnd anzeigen.
Wechsel der Seiten funktioniert an sich schon, aber die Verzögerung richtet sich immer nach dem
ersten Eintrag im Array (s.u.). Die nachfolgenden werden ignoriert:

HTML:
<script language="JavaScript">
<!--
IntervallZeit = 0;
var hallo = new Array();

hallo [0] = new Array("http://www.Seite1.de", 20000);
hallo [1] = new Array("http://www.Seite2.de", 3000);
hallo [2] = new Array("http://www.Seite3.de", 12000);
hallo [3] = new Array("http://www.Seite4.de", 6000);
hallo [4] = new Array("http://www.Seite5.de", 6000);
hallo [5] = new Array("http://www.Seite6.de", 6000);


function aReload() {
  Test1234.nZaehler++;
  
  if (Test1234.nZaehler == 6) { Test1234.nZaehler = 0; }
  top.mainFrame.location.href = hallo [Test1234.nZaehler] [0];
  }

  
function Test1234() {

     window.clearInterval(IntervallZeit);
     IntervallZeit = window.setInterval("aReload();", hallo [Test1234.nZaehler] [1]);
	
}

Test1234.nZaehler = 0;

//-->
</script>

Es werden also leider alle Seitenwechsel mit Verzögerung 20000 durchgeführt.

Danke Euch für Eure Tipps!!
Viele Grüße
Bernd
 
Zuletzt bearbeitet von einem Moderator:
Hi,

kannst du bitte mal noch den dazugehörigen HTML Code posten. In dem bisschen JS kann ich nicht allzu viel erkennen und die Fehlersuche gestaltet sich schwierig. Was ich auf den ersten Blick sehe, ist das diese Zeile top.mainFrame.location.href = hallo [Test1234.nZaehler] [0]; sehr komisch aussieht.

Steht was in der Fehlerkonsole? (http://forum.jswelt.de/javascript-faq/48897-finde-fehlerkonsole.html)

Dann habe ich ein paar Anmerkungen:
- Du solltest den JS-Tag so aufbauen: <script type="text/javascript">, deiner ist uralt und sollte so nicht mehr verwendet werden
(- IFrames sind total hässlich und ebenfalls uralt, bist du sicher das du das möchtest?)
- Wofür hast du <!-- und // --> im JS Code? - Meiner Meinung nach sind die unnötig.


Gruß
 
@rico: <!-- und //--> ist ein Fossil für ganz alte Browser, die kein JavaScript konnten (nicht nur deaktiviert, sondern "gar nicht"). Hiermit übermittelte man früher (!; und das ist verdammt lange her) dem JavaScript-nicht-könnenden-Browser, dass er das Folgende nicht kann - doch er konnte "Auskommentieren" verstehen und führte das, was darin stand, eben nicht mehr aus (= ignoriert). Wir reden gefühlt über Browser wie Netscape 1 und IE2. Wie Du also schon richtig angemerkt hast: Was der TO da zeigt, ist seeeehr alt und total "deprecated"! ;)
 
IFrames sind total hässlich und ebenfalls uralt, bist du sicher das du das möchtest?
Meinst du iFrames oder framesets? iFrames sind nämlich durchaus noch üblich - in HTML5 kommt sogar noch ein neues Attribut dazu: 4.7.6 The iframe element - sandbox attribute Und Framesets gelten offiziell auch erst in HTML5 als obsolet. (3.5 Obsolete Elements) Nichtsdestotrotz sind sie - wie du richtig festgestellt hast - hoffnungslos veraltet und extrem benutzerunfreundlich.
Noch was weiterführendes dazu: Why were frames deprecated in HTML5, but not iFrames? - Programmers Stack Exchange

- Wofür hast du <!-- und // --> im JS Code? - Meiner Meinung nach sind die unnötig.
Hier war SteelWheel schneller - dem ist nichts hinzuzufügen...
 
Ich nehme jetzt mal an, dass die Funktion Test1234 (ein super Funktionsname... so aussagekräftig... ;)) in window.onload-Event ausgeführt wird.
Dann wird einmal der Interval gesetzt und dann alle 20 Sekunden die Funktion aReload() aufgerufen. So hast du das programmiert.

Wenn du die Zeit unterschiedlich haben willst, ist window.setInterval() die falsche Wahl, sondern du brauchst window.setTimeout(). Und zwar in der aReload().

Noch ein paar Bemerkungen zum Code:
1. globale Variablen sollten vermieden werden und hier kann man komplett ohne auskommen.
2. der Array-Konstruktor sollte auch nicht verwendet werden, da er inkonsistent ist. Verwende lieber die Literalschreibweise. Ist sogar kürzer.
3. window.setInterval() und window.setTimeout() sollte man keinen String als Paramater geben, sondern eine Funktionsreferen.
4. deine Datenstruktur für die URLs und Wartezeiten wären besser in einem Object aufgehoben. Da erkennt man dann auch nach zwei Monaten sofort, für was die Zahlen gestanden haben.

Code:
window.addEventListener(
	"load",
	function(){
		var data = [
			{url: "http://www.Seite1.de", displayTime: 20000},
			{url: "http://www.Seite2.de", displayTime:  3000},
			{url: "http://www.Seite3.de", displayTime: 12000},
			{url: "http://www.Seite4.de", displayTime:  6000},
			{url: "http://www.Seite5.de", displayTime:  6000}
		];
		
		function aReload(){
			data.push(data.shift());
			top.mainFrame.location.href = data[0].url;
			window.setTimeout(aReload, data[0].displayTime);
		}
		aReload();
	},
	true
);
 
Oh, da warst du doch schneller als ich. Wollte gerade vorschlagen, dass der Code weggeworfen werden kann und mit setTimeout gearbeitet werden sollte :)
 
An alle vielen Dank für Hinweise und Hilfe
v.a. kkapsner

Umgebung ist ein CNC-Maschinen-Park, in dem im oberen Teil (=Frame) allg. Info,
im unteren Infos der einzelnen Maschinen im Wechsel angezeigt werden soll
diese Teile kommen von nem fremden CNC-Webserver, die nicht geändert werden können

Bin zu dem Teil wie die "Jungfrau" gekommen und sollte vorhandenes umschreiben,
damit draus ne "Slideshow" wird - also sorry für den Uraltcode
bin kein Web-Entwickler :)

Code funktioniert - vielen Dank!
Hab nur Zeilen der Funktion aReload umgedreht, damit die erste Seite nicht sofort verschwindet

Viele Grüße
Bernd
 
Zurück
Oben