Seite 1 von 2
Neues Fenster aus einem PopUp öffnen
Verfasst: Fr 07.Mär, 2008 09:20
von Dungeonwatcher
Moin!
Folgender Code ist ein Auszug aus einem von mir erzeugter PopUp für Webradio:
Code: Alles auswählen
<a href="#" onclick="window.close(); return false">Fenster schliessen</a> || <a href="{URL_VIEW_STAT}" target="_blank">Zeige alle Sender</a><br />
Wenn ich auf den Link "Zeige alle Sender" klicke, öffnet sich im SeaMonkey und im IE ein neues Fenster in der Größe des Fensters des Webbrowsers. Nur FF öffnet ein neues Fenster in der Größe des PopUps.
Fehlerhafter Code oder "zickt" der FF?
Bye
Verfasst: Fr 07.Mär, 2008 12:30
von oxpus
Wie schaut denn der Link zum Öffnen des Popups aus?
Verfasst: Fr 07.Mär, 2008 12:35
von Dungeonwatcher
Hi großer Meister!
Der schaut so aus:
Code: Alles auswählen
<a href="#" onclick="MyWindow=window.open('radplay2.php?action=radplaymini','MyWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=350,height=400'); return false;">Mini Player</a>
Verfasst: Fr 07.Mär, 2008 13:58
von oxpus
Jupp, der 2. Parameter ist hierbei falsch:
wäre der Name des Zielfensters.
HTML-konform muss hier für ein neues Fenster '_blank' eingetragen werden.
Und die Grösse solltest Du auch bestimmen. Also z. B. mit
Also Breite x Höhe in Pixel.
Wird im 3. Parameter eingefügt, bei Dir also direkt vor
Verfasst: Fr 07.Mär, 2008 14:35
von Dungeonwatcher
[quote="oxpus";p="85388"]Jupp, der 2. Parameter ist hierbei falsch:
wäre der Name des Zielfensters.
HTML-konform muss hier für ein neues Fenster '_blank' eingetragen werden.[/quote]
Hmm, es gibt auf 2 Seiten die Möglichkeit dieses PopUp aufzurufen. Da währe ein '_blank' sehr, sehr ungünstig.
Und die Grösse solltest Du auch bestimmen.
Es soll einfach ein kplt. neues Browserfenster aufgehen, so wie es bereits offen ist um das PopUp aufzurufen.
Verfasst: Fr 07.Mär, 2008 19:01
von oxpus
Öhm, ich vermute, von HTML hast Du doch noch zu wenig Wissen?
Das Target "_blank" öffnet immer ein neues Fenster. Ob ein komplettes Browserfenster oder Popup in der Grösse begrenzt ist davon erst einmal unberührt.
Diese Angabe ist auch kein Frame-Name im eigentlichen Sinn, sondern öffnet immer ein neues Fenster, egal, wieviele mit "_blank" bereits geöffnet wurden.
Daher ist das die einzigst richtige Methode gemäß den w3c Definitionen, ein neues Fenster zu erzeugen.
Des weiteren gibt es andere Methoden, wo rein eine Webseite geöffnet wird:
_top = Im Fenster der obersten Ebene, wenn der Link aus einem untergeordneten Fenster geöffnet wird. "Sprengt" dann auch ein Frameset!
_parent = In dem Fenster direkt einer Ebene höher als das aktuelle Fenster. Also z. B. im eigentlichen Browserfenster aus einem Popup heraus, sodern selbiges aus dem Hauptfenster aufgerufen wurde.
_self = Das ist die Standard-Einstellung für "target" und bedeutet eben "im gleichen Fenster". Man kann also target="_self" angeben oder weglassen, hat den gleichen Effekt.
Und eben _blank = (immer!) neues Fenster
Innerhalb eines Framesets gibt man dagegen immer die Namen der Frames an, wo eine Webseite zu öffnen ist. Diese Targets dürfen dann folglich nicht mit einem "_" beginnen.
Also z. B. besteht ein Frameset aus einer links angeordneten Navi mit dem Namen "navi" und einem rechten Hauptframe mit dem Namen "main".
Will man nun die Navi ändern und dort eine neue Webseite reinladen, wird target="navi" verwendet, für den rechten Frame dann analog target="main".
Ich hoffe, es war nun verständlich genug...
Verfasst: Fr 07.Mär, 2008 19:56
von Dungeonwatcher
Hi!
Danke für die Auffrischung meiner HTML Kenntnisse. Ich glaube wir reden wieder aneinander vorbei.
Es geht nur um dieses Stück Code im PopUp:
Code: Alles auswählen
<a href="{URL_VIEW_STAT}" target="_blank">Zeige alle Sender</a>
mit dem ein neues Browserfenster aufgemacht werden soll. SM und der IE öffnen korrekt (?) ein neues Browserfenster. Der FF öffnet ein neues PopUp mit dem Maßen des PopUps von dem es aufgerufen wurde. Diese beiden PopUps lassen weder eine Größenänderung noch ein scrollen des Inhalts zu. Das erste ist genau so gewollt, das zweite durch diesen Link aufgerufene nicht.
Mittlerweile denke ich das der FF das falsch macht, denn wie geschrieben der IE und SM öffne ein neues Browserfenster und nicht nur ein PopUp.
Verfasst: Fr 07.Mär, 2008 20:07
von oxpus
Ich sagte doch schon: Du musst Grössenangaben im 3. Parameter für window.open() einfügen, damit alle Browser das Fenster in der richtigen Grösse anzeigen. Der FF verwendet immer die Grösse des aufrufenden Fensters für ein neues Fenster, wenn die Angaben fehlen, IE (je nach Version) öffnet dann gleich ein maximiertes oder neues Browserfenster, daß durch Windows selber seine Grösse erhält.
Hatte ich Dir auch in einem meiner letzten Posts bereits geschrieben
Und dazu hast Du folgende Definitionen in den Parametern mit drinnen:
Übersetz mal, was das heisst, dann solltest Du schon dahinter kommen, warum das 2. Popup nicht in der Grösse verändert werden kann

Verfasst: Fr 07.Mär, 2008 21:23
von Dungeonwatcher
[quote="oxpus";p="85400"]Ich sagte doch schon: Du musst Grössenangaben im 3. Parameter für window.open() einfügen, damit alle Browser das Fenster in der richtigen Grösse anzeigen.[/quote]
Diese Angaben sind doch da.
Der FF verwendet immer die Grösse des aufrufenden Fensters für ein neues Fenster, wenn die Angaben fehlen, IE (je nach Version) öffnet dann gleich ein maximiertes oder neues Browserfenster, daß durch Windows selber seine Grösse erhält.
Und genau letzteres will ich erreichen.
Hatte ich Dir auch in einem meiner letzten Posts bereits geschrieben

Nö.
Und dazu hast Du folgende Definitionen in den Parametern mit drinnen:
Übersetz mal, was das heisst, dann solltest Du schon dahinter kommen, warum das 2. Popup nicht in der Grösse verändert werden kann

Das überzeugt mich einfach nur, das sich der FF anders verhält als die anderen Browser. Ob das nun so korrekt ist weiß ich auf Anhieb nicht, bestärkt mich aber darin ihn zu meiden. Ich nerve mit dieser Frage mal den Roland Kaiser (
www.kairo.at/ ). Er ist schließlich ein Insider was FF und Co angeht.
Verfasst: Sa 08.Mär, 2008 14:19
von oxpus
Wenn Du zitierst, dann bitte in der korrekten Reihenfolge und nicht neu umgestellt, bzw. aus dem Zusammenhang gerissen, so daß meine Aussagen nach Deinen Antworten hin falsch interpretiert werden können! Danke!
Dann zu den Grössenangaben, sorry, hatte ich vorher nicht entdeckt:
Die dienen einem Browser dazu, das neu zu öffnende Fenster in der Grösse festzulegen. Wenn die Angaben dem ersten Popup entsprechen, handelt der Firefox absolut korrekt, in dem er ein gleich grosses Popup öffnet.
Wenn er das NICHT soll, darf er KEINE Fenstergrössen genannt bekommen!
Ich hatte Deinen Wunsch hierzu bislang genau anders herum verstanden. Sorry.
Und daß IE und Safari ein "grosses" neues Fenster öffnen, kommt eben vom Ziel im Link. Die beiden interpretieren eben einen "echten" Framenamen als komplettes Fenster, was ja eigentlich dann falsch ist, wäre aber in diesem Fall dann auch falsch programmiert!
Dazu hast Du den Link auch so aufgebaut, daß im HTML-Link das Ziel ein Javascript ist, und das HTML-Link-Ziel ein "_blank", das im Link eingebundene "window.open" hier aber abweichende Angaben nennt!
Und nach den w3c Definitionen darf im Target nur einer der von mir zuletzt genannten "_"-Angaben stehen oder ein gültiger, zuvor im Fenster oder Frameset definierter Name, sonst wäre es ein illegales Target und damit ein HTML-Fehler! Wo Du doch so gerne HTML-konform arbeitest
Besser wäre, den Link im Popup so zu verfassen:
Code: Alles auswählen
<a href="radplay2.php?action=radplaymini" target="_blank">Zeige alle Sender</a>
und damit wirklich eben die Browser dazu zu veranlassen, ein neues Fenster zu öffnen

Allerdings handelt dann der Firefox weiterhin nach den eigenen Einstellungen (die der Anwender einstellt!) und öffnet das neue Fenster in dem Fenster, das entweder gerade aktiv ist oder eben dann doch ein neues Fenster.
Hier ist dann nicht der FF sondern der Anwender "Schuld", wenn das so aufgerufene Fenster z. B. als neuer Tab im Popup-Fenster erscheint.
Dazu gibt es mit dem FF bewusst Einstellungen, neue Fenster nach Anwenderwunsch hin eben in bestimmter Weise zu öffnen, dagegen kann Javascripit dann nichts tun.
Ich denke, IE und Safari haben bei Deinem Link zunächst nur den HTML-Teil des Links gesehen, also wird auch schlicht zunächst ein neues Browser-Fenster geöffnet. Und das wäre dann in diesem Falle zwar zunächst nicht falsch, aber die JS-Angaben zum Link hätten dann beide ignoriert und dadurch dennoch einen Fehler gemacht...
Verfasst: Sa 08.Mär, 2008 15:39
von Dungeonwatcher
[quote="oxpus";p="85407"]Wenn Du zitierst, dann bitte in der korrekten Reihenfolge und nicht neu umgestellt, bzw. aus dem Zusammenhang gerissen, so daß meine Aussagen nach Deinen Antworten hin falsch interpretiert werden können! Danke![/quote]
Upps, war keine Absicht.
Dann zu den Grössenangaben, sorry, hatte ich vorher nicht entdeckt:
Die dienen einem Browser dazu, das neu zu öffnende Fenster in der Grösse festzulegen. Wenn die Angaben dem ersten Popup entsprechen, handelt der Firefox absolut korrekt, in dem er ein gleich grosses Popup öffnet.
Wenn er das NICHT soll, darf er KEINE Fenstergrössen genannt bekommen!
Dann handeln also IE und SM inkorrekt.
Ich hatte Deinen Wunsch hierzu bislang genau anders herum verstanden. Sorry.
Ich hatte es geahnt.
Und daß IE und Safari ein "grosses" neues Fenster öffnen, kommt eben vom Ziel im Link. Die beiden interpretieren eben einen "echten" Framenamen als komplettes Fenster, was ja eigentlich dann falsch ist, wäre aber in diesem Fall dann auch falsch programmiert!
Hmmm..
Dazu hast Du den Link auch so aufgebaut, daß im HTML-Link das Ziel ein Javascript ist, und das HTML-Link-Ziel ein "_blank", das im Link eingebundene "window.open" hier aber abweichende Angaben nennt!
Das bringe ich wieder nicht zusammen.
Diese beiden Links haben doch gar nichts miteinander zu tun, außer das sie im selben Fenster stehen.
Und nach den w3c Definitionen darf im Target nur einer der von mir zuletzt genannten "_"-Angaben stehen oder ein gültiger, zuvor im Fenster oder Frameset definierter Name, sonst wäre es ein illegales Target und damit ein HTML-Fehler! Wo Du doch so gerne HTML-konform arbeitest
Besser wäre, den Link im Popup so zu verfassen:
Code: Alles auswählen
<a href="radplay2.php?action=radplaymini" target="_blank">Zeige alle Sender</a>
und damit wirklich eben die Browser dazu zu veranlassen, ein neues Fenster zu öffnen
Ich habe es momentan so gelöst:
Code: Alles auswählen
<a href="#" onclick="MyWindow1=window.open('{URL_VIEW_STAT}','MyWindow1','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=1024,height=768'); return false;">{LINK_VIEW_STAT}</a>
Damit wird ein neues PopUp geöffnet, welches von mir eine festgelegte Größe hat. Die 1024x768 orientieren sich an meinem Portal welches auf diese Auflösung angelegt ist.
Allerdings handelt dann der Firefox weiterhin nach den eigenen Einstellungen (die der Anwender einstellt!) und öffnet das neue Fenster in dem Fenster, das entweder gerade aktiv ist oder eben dann doch ein neues Fenster.
Hier ist dann nicht der FF sondern der Anwender "Schuld", wenn das so aufgerufene Fenster z. B. als neuer Tab im Popup-Fenster erscheint.
Dazu gibt es mit dem FF bewusst Einstellungen, neue Fenster nach Anwenderwunsch hin eben in bestimmter Weise zu öffnen, dagegen kann Javascripit dann nichts tun.
PopUps bleiben davon aber wohl verschont. Ich werde es aber spätestens heute Abend erfahren wenn meine FF Nutzer von der Arbeit kommen und sich einloggen.
Verfasst: Sa 08.Mär, 2008 21:29
von oxpus
Warum schreibst Du den Link nicht nicht so:
Code: Alles auswählen
<a href="{URL_VIEW_STAT}" target="_blank">{LINK_VIEW_STAT}</a>

?
Verfasst: Mo 10.Mär, 2008 19:16
von Dungeonwatcher
Hi!
Nee, das bringt leider auch nicht das gewünschte. Der FF weigert sich beharrlich meine Wünsche umzusetzen.
Egal, ich hab's jetzt anders gelöst. Die Senderliste ist nun nicht mehr aus dem Player PopUp aufrufbar, sondern über das Portal als "Unterlink" für das Player PopUp. Ich denke das es so auch viel viel übersichtlicher ist.
Bye
Verfasst: Di 11.Mär, 2008 08:52
von oxpus
Auch eine Lösung.
Nun ja, vielleicht fällt uns irgendwann noch mal was passendes ein...
Verfasst: Di 11.Mär, 2008 09:23
von Dungeonwatcher
Moin! großer Meister!
Bestimmt.
Ein kniffliges Problem gibt's aber noch. Zwei Links will ich zusammenfügen. Unnd zwar habe ich auf der Übersichtsseite der Sender für jeden Sender einen kleinen Button der diesen Sender inkl. dem dazugehörigen Stream direkt auf einer neuen Forumseite aufruft und abspielen lässt:
Code: Alles auswählen
<td align="center" valign="middle" class="row2" rowspan="2">
<form action="radplay2.php" method="post" enctype="application/x-www-form-urlencoded" name="urlsent">
<input name="data" type="hidden" value="{list_block.LINK_STATIONURL}"></input>
<input name="edit_station_name" type="hidden" value="{list_block.LINK_STATIONNAME}"></input>
<input name="edit_station_genre" type="hidden" value="{list_block.LINK_STATIONGENRE}"></input>
<input name="edit_station_bandwidth" type="hidden" value="{list_block.LINK_STATIONBANDWIDTH}"></input>
<input name="edit_station_country" type="hidden" value="{list_block.LINK_STATIONCOUNTRY}"></input>
<input name="edit_station_poster" type="hidden" value="{list_block.LINK_STATIONPOSTER}"></input>
<input name="edit_station_comments" type="hidden" value="{list_block.LINK_STATIONCOMMENTS}"></input>
<input name="datasend" type="image" src="./templates/FiBlack/images/lang_german/icon_mp.gif" alt="abspielen" />
</form>
</td>
Das funktioniert perfekt. Nun möchte ich das keine Forumseite sondern das gaaaanz oben zitierte PopUp aufgerufen wird. Dazu müssten diese beiden Zeilen zusammengeführt werden. Zum einen der Aufruf für das PopUp:
Code: Alles auswählen
<a href="#" onclick="MyWindow=window.open('radplay2.php?action=radplaymini', 'MyWindow', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, width=350,height=400,top=50, left=50'); return false;"> Bord Radio</a>
und diese
Code: Alles auswählen
<input name="datasend" type="image" src="./templates/FiBlack/images/lang_german/icon_mp.gif" alt="abspielen" />
Wenn ich SelfHTML richtig verstehe, dann ist im Tag "
input" das Tag "
a" nicht statthaft und ebenso darf ein "
input" auch nicht in einem "
a" vorkommen.

Verfasst: Di 11.Mär, 2008 10:07
von oxpus
Wenn ich SelfHTML richtig verstehe, dann ist im Tag "input" das Tag "a" nicht statthaft und ebenso darf ein "input" auch nicht in einem "a" vorkommen.
Das ist soweit korrekt, aber man kann in einem input und im form-Tag selber ein "onclick", bzw. "onsubmit" einfügen.
Aber zunächst zum Verständnis:
Auf der Übersichtsseite der Sender ist das input vorhanden, um den Sender aufzurufen und zu starten.
Das ganze soll aber nicht auf einer neuen Seite, sondern in dem Popup geschehen.
Soweit richtig?
Vielleicht klappt das so:
Code: Alles auswählen
<form action="radplay2.php" method="post" enctype="application/x-www-form-urlencoded" name="urlsent">
ändern in
Code: Alles auswählen
<form action="radplay2.php" method="post" enctype="application/x-www-form-urlencoded" name="urlsent" onsubmit="MyWindow=window.open('radplay2.php?action=radplaymini', 'MyWindow', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, width=350,height=400,top=50, left=50'); return false;">
Verfasst: Di 11.Mär, 2008 10:26
von Dungeonwatcher
[quote="oxpus";p="85466"]Soweit richtig?[/quote]
Korrekt.
Vielleicht klappt das so:
Das ist schon mal ein Teilerfolg. Das richtige PopUp wird aufgerufen, der Player ist da, die Senderliste ist da. Allerdings werden die Formulardaten nicht übergeben und somit startet der ausgewählte Sender nicht mehr automatisch.
Verfasst: Di 11.Mär, 2008 12:03
von oxpus
Dann ändere mal das "return false" in "return true" oder entferne es komplett.
Vielleicht hilft das.
Verfasst: Di 11.Mär, 2008 12:11
von Dungeonwatcher
Neee, dann wird das PopUp wieder ignoriert und der Player auf der Forum Seite geöffnet. Er spielt aber dann auch wieder gleich den gewünschten Sender.
Lassen sich die Parameter aus
Code: Alles auswählen
<input name="data" type="hidden" value="{list_block.LINK_STATIONURL}"></input>
<input name="edit_station_name" type="hidden" value="{list_block.LINK_STATIONNAME}"></input>
<input name="edit_station_genre" type="hidden" value="{list_block.LINK_STATIONGENRE}"></input>
<input name="edit_station_bandwidth" type="hidden" value="{list_block.LINK_STATIONBANDWIDTH}"></input>
<input name="edit_station_country" type="hidden" value="{list_block.LINK_STATIONCOUNTRY}"></input>
nicht auch direkt per Url übergeben? Ich stelle mir das ungefähr so vor:
Code: Alles auswählen
<input onclick="MyWindow=window.open('radplay2.php?action=radplaymini&{list_block.LINK_STATIONURL}&{list_block.LINK_STATIONNAME}', 'MyWindow', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, width=350,height=400,top=50, left=50'); return false;">
Das funktioniert aber so direkt nicht?
Verfasst: Di 11.Mär, 2008 13:06
von oxpus
Das funktioniert nicht, weil das Formular POST-Daten senden soll und diese wohl auch so erwartet werden.
Daher wäre die GET-Methode über URL nicht möglich, ausser man würde das Script selber ändern.
Wobei ich davon ausgehe, daß die radplay2.php auf Deinem Server liegt?
Verfasst: Di 11.Mär, 2008 13:23
von Dungeonwatcher
[quote="oxpus";p="85471"]Das funktioniert nicht, weil das Formular POST-Daten senden soll und diese wohl auch so erwartet werden.
Daher wäre die GET-Methode über URL nicht möglich, ausser man würde das Script selber ändern.[/quote]
Oha.
Wobei ich davon ausgehe, daß die radplay2.php auf Deinem Server liegt?
Jupp.
Verfasst: Di 11.Mär, 2008 13:44
von oxpus
Dann müsste man dort mal nachschauen, in wie weit die Daten per $HTTP_POST_VARS, bzw. $_POST übernommen werden und das um $HTTP_GET_VARS, bzw. $_GET erweitern, damit die Daten in den Link rein könnten...
Verfasst: Di 11.Mär, 2008 13:59
von Dungeonwatcher
Da ist mein bisschen Latein am Ende...
Wenn ich aber die
radplay2.php richtig interpretiere dann dürften dies die richtigen Stellen darin sein:
Code: Alles auswählen
//
// Submitted data from the $_POST (or template)
//
$radplaymini = $_POST['radplaymini'];
$mode = ($_GET['action']) ? $_GET['action'] : $_POST['action'];
//
// Assinging variables to the body file...
//
$template->assign_vars(array(
'PAGE_TIT' => $lang['Title'],
'PAGE_TIT2' => $lang['Version'],
'URL_RADPLAY' => $lang['url_radplay'],
'PLAY_INFO' => $lang['playinfo'],
'SOURCEINFO' => $lang['sourceinfo'],
'RAD_WELCOME' => $lang['rad_welcome'],
'RADPLAY_WARNING' => $lang['radplay_warning'],
'LINK_ADD_STAT' => $lang['link_add_stat'],
'LINK_VIEW_STAT' => $lang['link_view_stat'],
'LINK_BACK_FORUM' => $lang['link_back_forum'],
'URL_ADD_STAT' => $lang['url_add_stat'],
'URL_VIEW_STAT' => $lang['url_view_stat'],
'URL_BACK_FORUM' => $lang['url_back_forum'],
'URL_FORM_ACTION' => $_SERVER['radplay2.php'],
'RADPLAY_LOADMINI' => $_SERVER['radplay2.php'],
'DATAPASS' => $HTTP_POST_VARS['Selectstation'],
'DATAPASS_REMOTE' => $HTTP_POST_VARS['data'],
'DATAPASS_MINI' => $HTTP_POST_VARS['datamini']
)
);
bzw.
Code: Alles auswählen
$gen_simple_header = TRUE;
include($phpbb_root_path . 'includes/page_header.'.$phpEx);
$template->set_filenames(array(
'body' => 'radplaymini_body.tpl'
)
);
$sql = " SELECT * FROM " . $db_table . " ORDER BY id ASC ";
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, $sql, 'Error Querying Database', __LINE__, __FILE__, $sql);
}
if ($row = $db->sql_fetchrow($result))
{
$i = 0;
do
{
$template->assign_block_vars('user_block', array(
"LINK_STATIONID" => $row['id'],
"L_STATIONNAME" => $row['station_name'],
"L_BANDWIDTH" => $row['station_bandwidth'],
"L_STATION_URL" => $row['station_url'],
"L_STATION_COUNTRY" => $row['station_country'],
"L_STATION_POSTER" => $row['station_poster'],
)
);
}
while ($row = $db->sql_fetchrow($result));
}
else
{
message_die(GENERAL_ERROR, 'Could not process query', __LINE__, __FILE__, $sql);
}
$template->pparse('body');
Verfasst: Di 11.Mär, 2008 14:05
von oxpus
Keine Ahnung, ich kenne das gesamte Script ja nicht

Verfasst: Di 11.Mär, 2008 14:17
von Dungeonwatcher
Mehr ist das auch nicht. Nur der letzte Block ist so ähnlich nochmal für die Forumseite mit Player.