PopUp automatisch schließen?
nobody85
- javascript
Hallo,
versuche verzweifelt ein JS zu schreiben, in der ich mehrere Fenster öffne und diese sich nach ein paar Sekunden selbstständig wieder schließen.
Das öffnen klappt prima aber sowie ich den Timeout mit reinnehme klappt das ganze nicht mehr.
Hier der Teil meines Scripts der hackt:
function aufruf() {
f = new Array(links.length);
for (var j=0; j<links.length; j++) {
var tmp = links[j];
f[j]=window.open(links[j], "Fenster"+j, "width=310,height=400,left=0,top="+(j*10));
f[j].setTimeout("display('c','"+ele+"')",3000);
}
}
Weiß jemand Rat? Wenn ich den Timeout einfüge geht immer nur der erste Link auf und es kommt vermutlich zu einem Fehler in der Schleife. Ist bestimmt nur eine Kleinigkeit aber irgendwie sehe ich diese nicht.
Gruß
Nobody85
Hallo,
was sagt denn die Javascript-Console deines Browsers dazu? Steht da eine sinnvolle Fehlermeldung?
Gruß,
Marcel
Hi!
versuche verzweifelt ein JS zu schreiben, in der ich mehrere Fenster öffne und diese sich nach ein paar Sekunden selbstständig wieder schließen.
Zum Javascript-Üben oder für den wirklichen Einsatz im Web?
Im zweiten Fall solltest du dein Vorhaben noch einmal überdenken.
Nicht jeder User hat JS aktiviert oder überhaupt die Möglichkeit dieses zu nutzen.
Außerdem gibt es Popupblocker, die dein Vorhaben zunichte machen könnten.
Mittlerweile verfügt eigentlich jeder aktuelle Browser über so einen Popupblocker.
Außerdem bieten einige Browser die Möglichkeit, Popups in neuen Tabs statt in neuen Fenstern zu öffnen.
Hier der Teil meines Scripts der hackt:
Der hackt? Wirklich? Ist bestimmt nicht schön... :)
Du meinst, es funktioniert nicht?
Bekommst du eine Fehlermeldung?
Wenn ja, welche?
Bekommst du keine Fehlermeldung?
Dann solltest du versuchen, den Fehler zu finden:
Der Firefox bietet dir die "Fehler-Konsole" aus dem Menü "Extras".
Damit solltest du dem Problem auf den Grund gehen können.
Ansonsten kannst du auch einen Javascript-Debugger einsetzen.
Für den Firefox gäbe es das Add-on "JavaScript-Debugger".
Was andere Browser da bieten, kann ich nicht sagen.
Schätzungsweise bietet Opera etwas ähnlich brauchbares und über den JS-Debugger des Internet Explorers will ich gar keine Vermutungen anstellen...
Weiß jemand Rat?
Wenn du deinen kompletten Code gepostet hättest, dann hätte man das mal ausprobieren können...
und es kommt vermutlich zu einem Fehler in der Schleife.
Finde dies raus, indem du einen JS-Debugger oder ein ähnliches Werkzeug einsetzt.
Schöner Gruß,
rob
Hallo,
Zum Javascript-Üben oder für den wirklichen Einsatz im Web?
Es soll nachher wirklich funktionieren. Ich muss mehrere Links öffnen können aber da es einige sein können, und ich diese auch nicht alle wieder zuklicken will soll das automatisch funktionieren. Soweit ich weiß geht das rein mit html nicht oder liege ich da falsch?
Bekommst du eine Fehlermeldung?
Jain, im IE bekomme ich die Fehlermeldung "Zugriff verweigert, und der Firefox bringt keinerlei Fehler,allerdings funktioniert das Timeout auch nicht.
Wenn du deinen kompletten Code gepostet hättest, dann hätte man das mal ausprobieren können...
Sorry kommt natürlich nach. Außerdem hatte ich auch noch ne falsche Zeile drin. Also hier nochmal (ist aus verschiedenen zusammenkopiert):
<html>
<head>
<script type="text/javascript">
<!--
function zusammenfassen() {
var a=eval(document.getElementsByTagName("a"));
links = new Array();
for (var j=0; j<a.length; j++) {
if (a[j].href.indexOf("www")>0) {
links[j]=a[j].href;
a[j].style.visibility="hidden";
}
}
document.getElementById("einklick").style.visibility="visible";
}
function aufruf() {
f = new Array(links.length);
for (var j=0; j<links.length; j++) {
var tmp = links[j];
f[j]=window.open(links[j], "Fenster"+j, "width=310,height=400,left=0,top="+(j*10));
f[j].setTimeout ('window.close()',2000);
}
}
//-->
</script>
</head>
<body onload="zusammenfassen()">
<a href="http://www.muster.de/">"http://www.muster.de/"</a><br>
<a href="http://www.beispiel.de/">"http://www.beispiel.de/"</a></br>
<a href="http://www.test.de/">"http://www.test.de/"</a></br>
<a href="javascript:aufruf()" style="visibility:hidden" id="einklick">alles auf einen Klick</a>
</body>
</html>
Sieht jemand einen Fehler?
Gruß
nobody
Hallo Nobody85,
Hier der Teil meines Scripts der hackt:
function aufruf() {
f = new Array(links.length);
for (var j=0; j<links.length; j++) {
var tmp = links[j];
f[j]=window.open(links[j], "Fenster"+j, "width=310,height=400,left=0,top="+(j*10));
(1)
f[j].setTimeout("display('c','"+ele+"')",3000);
}
}
Zuerst ein Vorschlag - auf die Fehlerkonsole des FF wurdest du ja schon hingewiesen - füg doch mal an Stelle (1) ein alert(f[j] ein. Ist jetzt nur ein Schuß ins blaue, aber vielleicht klappt ja doch irgendwie was mit dem Erstellen des Fensters nicht... Ich könnte mir auch vorstellen, dass der browser ein paar ms braucht, bevor das Objekt richtig zur Verfügung steht und man setTimeout anwenden kann. Ist jetzt aber erstmal nur so eine Vermutung.
Dann noch zwei kleine fragen:
sind links und ele tatsächlich globale variablen, wie ich vermute? - ist meiner Ansicht nach nicht so guter Stil, warum übergibst du diese nicht als Parameter, wenn du Sie innerhalb der Funktion brauchst?
brauchst du die Variable tmp, oder ist die beim debuggen und ausprobieren übrigggeblieben?
Liebe Grüße mbr
Hallo,
und vielen Dank für deine Antwort.
Ich hatte versehentlich eine falsche Zeile gepostet. Ich habe den kompletten Quelltext bereits komplett im Thread gepostet (siehe unten).
Leider weiß ich nicht genau wie ich mit der Debugkonsole umgehen soll.
Ich habe komischerweise auch einen Unterschied zwischen Firefox und IE. Beim IE geht nur ein Fenster meiner 3 Links auf, und danach wirft die Debugkonsole einen Fehler "Zugriff verweigert".
Beim Firefox gehen alle Links auf, aber das Timeout funktioniert nicht. In der Konsole ist auch nicht ersichtlich, dass diese Zeile einen Fehler verursacht.
Hilft dir der Quelltext im Thread weiter?
Würde mich sehr über Hilfe freuen.
Gruß
Nobody
Hello,
Leider weiß ich nicht genau wie ich mit der Debugkonsole umgehen soll.
Ich habe komischerweise auch einen Unterschied zwischen Firefox und IE. Beim IE geht nur ein Fenster meiner 3 Links auf, und danach wirft die Debugkonsole einen Fehler "Zugriff verweigert".
...die Fehlermeldung sollte dich auf die Fährte bringen. Kann es sein, dass PopUp und Hauptfenster von unterschiedlichen Domains stammen? Wenn ja, bist du an der Same-Origin-Policy gescheitert und nein, da gibts auch keine direkte Lösung für.
MfG
Rouven
Hallo,
vielen Dank für den Tipp. Ich befürchte du hast recht. Die Seite liegt und wird auch immer lokal auf dem Rechner der das Script anwendet liegen und dann die darin vermerkten Links aufrufen. Sprich es sind 2 verschiedene Domänen.
Gibt es eine Möglichkeit das ganze zum umgehen? Wenn Mögliche eine Variante, die nicht bei jedem Anwender als Zertifikat oder ähnliches importiert werden muss?
Oder kennt jemand eine ganz andere Möglichkeit? Es muss ja nicht zwingend JS sein.
Würde mich über eine schnelle Antwort freuen!
Gruß
Nobody
Hello,
Oder kennt jemand eine ganz andere Möglichkeit? Es muss ja nicht zwingend JS sein.
dazu müsstest du genauer sagen, was du eigentlich vorhast. Was klappen könnte:
MfG
Rouven
Hallo,
Was ich vorhabe:
Ich exportiere aus einem Programm, das offline arbeitet, eine HTML-Seite lokal auf meinen Rechner. Diese beinhaltet jede Menge Links zu anderen Servern. Diese Links will ich auf einmal alle öffnen (oder auch kurz hintereinander) und die Fenster anschließend (da es einige sein können) wieder beenden.
Da ich sozusagen nur lokal arbeite ist das mit den serverseitigen Geschichten so eine Sache!
Wie kann man das Problem lösen?
Gruß
Nobody85
Hello,
Da ich sozusagen nur lokal arbeite ist das mit den serverseitigen Geschichten so eine Sache!
das eine schließt das andere nicht aus. Du könntest dir beispielsweise lokal einen Apache und PHP installieren, die HTML-Seite über den localhost aufrufen und dort dann auch ein PHP-Skript ablegen, das die externen Seiten abruft.
Wie kann man das Problem lösen?
Nochmal: Alternativ könntest du es mit einem Frameset probieren.
HTML -> PopUp = lokales Frameset -> 1 Frame mit externer Seite.
MfG
Rouven
Hallo,
ich habe noch ein bisschen umprogrammiert und eine fast laufende Möglichkeit gefunden.
Ich habe statt dem Timeout eine weitere Schleife geschrieben, die alle Fenster nach Ablauf einer gewissen Zeit schließt.
Das funktioniert auch prima, leider lädt nur die sich öffnende Seiten sich nicht.
Mit den Frames das funktioniert leider auch nicht!
Ich vermute es liegt dran, dass der "tread" hängt und ein Laden somit nicht möglich ist. Hier die wichtigsten Auszüge:
function pausecomp(millis){
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < millis);
}
function aufruf() {
f = new Array(links.length);
for (var j=0; j<links.length; j++) {
var tmp = links[j];
f[j]=window.open(links[j], "Fenster"+j, "width=310,height=400,left=0,top="+(j*10));
}
var tmp = f.length;
if (tmp<=5) tmp=5;
pausecomp((tmp/10)*5000);
for (var j=0; j<links.length; j++) {
f[j].close();
}
Weiß jemand wie ich vielleicht ein parallelen Task oder Timertask starten kann?
Bei dem Befehl wird der "Zugriff verweigert":
f[j].setTimeout ('window.close()',2000);
Würde mich über Hilfe sehr freuen!
Gruß
Nobody85