Pop-up-Fenster aus SVG-Dokument heraus mittels Javascript öffnen
Andi
- javascript
Hallo,
ich habe eine Deutschlandkarte im SVG-Format. Wenn ich auf ein Bundesland klicke, soll ein Pop-up-Fenster mit zusätzlichen Informationen geöffnet werden. Hierzu wird im Falle eines onclick-Ereignis folgende Javascript-Funktion aufgerufen:
function openInfoWindow(evt)
{
var id = evt.target.getAttribute('id');
var url='infoWindow.php?ID='+id;
var newwindow=window.open(url,'name','height=300,width=400');
if (window.focus) {newwindow.focus()}
return false;
}
Diese Funktion arbeitet im Firefox ohne Beanstandung. Im Internet Explorer wird mir jedoch folgende Fehlermeldung ausgegeben: Laufzeitfehler in Microsoft JScript - Erlaubnis verweigert. Der Fehler tritt frühestens ab der Zeile mit dem Befehl "window.open(...)" auf. Wäre froh, wenn einer von Euch eine Idee zu meinem Problem hätte.
Viele Grüße,
Andi
Hallo Andi,
Im Internet Explorer wird mir jedoch folgende Fehlermeldung ausgegeben: Laufzeitfehler in Microsoft JScript - Erlaubnis verweigert. Der Fehler tritt frühestens ab der Zeile mit dem Befehl "window.open(...)" auf.
Probiere es mit top.open() statt window.open().
Grüße,
Thomas
Hallo Andi,
Im Internet Explorer wird mir jedoch folgende Fehlermeldung ausgegeben: Laufzeitfehler in Microsoft JScript - Erlaubnis verweigert. Der Fehler tritt frühestens ab der Zeile mit dem Befehl "window.open(...)" auf.
Probiere es mit top.open() statt window.open().
Grüße,
Thomas
Hallo Thomas,
erstmal danke für Deinen Tipp. Ich habe es mit top.open() probiert und wieder eine Fehlermeldung für dieselbe Stelle (line 10, column 2) ausgegeben bekommen: Script error - Zugriff verweigert.
Viele Grüße,
Andi
Lieber Andi,
Script error - Zugriff verweigert.
das liegt garantiert daran, dass Du verschiedene HTML-Dokumente von verschiedenen Domains in Deinem Frameset hast. JavaScript befolgt (weitestgehend) die "same origin policy", wonach der Zugriff auf Webseiten von anderen Domains gesperrt ist. Das heißt im Klartext, dass Du auf ein Dokument innerhalb eines Frames genau dann keinen Zugriff mehr hast, wenn es von einer anderen Domain stammt, als das Frameset selbst. Daher rührt diese Fehlermeldung.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Lieber Andi,
Script error - Zugriff verweigert.
das liegt garantiert daran, dass Du verschiedene HTML-Dokumente von verschiedenen Domains in Deinem Frameset hast. JavaScript befolgt (weitestgehend) die "same origin policy", wonach der Zugriff auf Webseiten von anderen Domains gesperrt ist. Das heißt im Klartext, dass Du auf ein Dokument innerhalb eines Frames genau dann keinen Zugriff mehr hast, wenn es von einer anderen Domain stammt, als das Frameset selbst. Daher rührt diese Fehlermeldung.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo Felix,
auf Deinen Hinweis hin habe ich mir nochmal die Charta durchgelesen. Stimmt, ich habe doppelt gepostet. Sorry.
Danke für Deinen Tipp. Allerdings liegen beide Dateien, d.h. die SVG-Karte und das Pop-Fenster, imselben Ordner. Daran sollte es nicht liegen. Hast Du vielleicht noch eine Idee.
Viele Grüße, Andi
Hallo Andi,
Ich habe es mit top.open() probiert und wieder eine Fehlermeldung für dieselbe Stelle (line 10, column 2) ausgegeben bekommen: Script error - Zugriff verweigert.
Das Problem ist nicht neu und wie geschrieben, hat top statt window mal funktioniert, aber das war wohl noch zu IE6-Zeiten. Vielleicht ist auch einfach nur der Popup-Blocker aktiv.
Grüße,
Thomas
Hallo Andi,
Ich habe es mit top.open() probiert und wieder eine Fehlermeldung für dieselbe Stelle (line 10, column 2) ausgegeben bekommen: Script error - Zugriff verweigert.
Das Problem ist nicht neu und wie geschrieben, hat top statt window mal funktioniert, aber das war wohl noch zu IE6-Zeiten. Vielleicht ist auch einfach nur der Popup-Blocker aktiv.
Grüße,
Thomas
Hallo Thomas,
Mein Popup-Blocker ist nicht aktiviert. Eine Meldung, dass ein Popup geblockt wurde, gibt es auch nicht.
Grüße,
Andi
Hallo,
> var newwindow=window.open(url,'name','height=300,width=400');
Diese Funktion arbeitet im Firefox ohne Beanstandung. Im Internet Explorer wird mir jedoch folgende Fehlermeldung ausgegeben: Laufzeitfehler in Microsoft JScript - Erlaubnis verweigert.
ein window-Objekt 'name' zu nennen, wird den IE verwirren: http://de.selfhtml.org/javascript/objekte/window.htm#name
Sicher fällt dir eine bessere Bezeichnung ein ...
Gruß plan_B
Hallo,
var newwindow=window.open(url,'name','height=300,width=400');
>
> > Diese Funktion arbeitet im Firefox ohne Beanstandung. Im Internet Explorer wird mir jedoch folgende Fehlermeldung ausgegeben: Laufzeitfehler in Microsoft JScript - Erlaubnis verweigert.
>
> ein window-Objekt 'name' zu nennen, wird den IE verwirren: <http://de.selfhtml.org/javascript/objekte/window.htm#name>
> Sicher fällt dir eine bessere Bezeichnung ein ...
>
> Gruß plan\_B
Hallo plan\_B,
danke für Deinen Vorschlag. Ich habe den Namen mal auf 'iwin' geändert und mal auf null gesetzt. In beiden Fällen wird mir im IE 7 dieselbe Fehlermeldung zurückgegeben.
Gruß, Andi
Hallo,
danke für Deinen Vorschlag. Ich habe den Namen mal auf 'iwin' geändert und mal auf null gesetzt. In beiden Fällen wird mir im IE 7 dieselbe Fehlermeldung zurückgegeben.
hier zeigt sich mal wieder, dass man mit den Fehlermeldungen des IE nix anfangen kann. Dann wird der Fehler schon früher auftreten. Du hast die unterschiedliche Event-Behandlung des IE nicht berücksichtigt.
wie rufst du die Funktion auf?
> function openInfoWindow(evt)
> {
> var id = evt.target.getAttribute('id');
> ...
> }
function openInfoWindow(evt)
{
var targ = evt ? evt.target : window.event.srcElement;
if (!targ) {
alert( "ERROR - no target");
}
else {
var id = target.getAttribute('id') ;
alert("id: "+id);
...
}
}
http://msdn.microsoft.com/en-us/library/ms535863(VS.85).aspx
Gruß plan_B
hoffe, Prinzip ist trotz des Fehlers klar geworden. Schritt für Schritt debuggen ....
function openInfoWindow(evt)
{
var targ = evt ? evt.target : window.event.srcElement;
if (!targ) {
alert( "ERROR - no target");
}
else {
var id = target.getAttribute('id') ;
var id = targ.getAttribute('id') ;
alert("id: "+id);
...
}
}
Gruß plan\_B
--
\*®\*´¯`·.¸¸.·
hoffe, Prinzip ist trotz des Fehlers klar geworden. Schritt für Schritt debuggen ....
function openInfoWindow(evt)
{
var targ = evt ? evt.target : window.event.srcElement;
if (!targ) {
alert( "ERROR - no target");
}
else {
var id = target.getAttribute('id') ;var id = targ.getAttribute('id') ;
alert("id: "+id);
...
}
}
>
> Gruß plan\_B
Hallo plan\_B,
Danke für Deine Ideen. Bzgl. der Fehlermeldungen im IE stimme ich Dir zu.
Das Programm wird in svg folgendermaßen aufgerufen:
<g id="states" transform="translate(2,2)" fill="#5EAD45" stroke="black" onmouseover="highlight(evt)" cursor="pointer" onmouseout="lowlight(evt)" onclick="openInfoWindow(evt)" opacity="1.0" class="statesBoundary">
Die Funktion habe ich in der Zwischenzeit noch etwas vereinfacht:
function openInfoWindow(evt) {
id = evt.target.getAttribute('id');
alert(id);
newwindow = window.open('infoWindow.php?ID=' + id, 'smallWindow',
'height=405, width=415');
if (window.focus) {newwindow.focus();}
}
Die im Fenster ausgegebene "id" ist korrekt. Demnach muß der Fehler wohl in der Zeile mit dem "window.open()" statement liegen. Es ist bestimmt so ein versteckter doofer Anfängerfehler. Wird mich wohl noch eine Weile kosten den Bug zu finden.
Viele Grüße,
Andi