Andi: Pop-up-Fenster aus SVG-Dokument heraus mittels Javascript öffnen

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

  1. 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

    1. 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

      1. 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.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. 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

      2. 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

        1. 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

  2. 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

    --
         *®*´¯`·.¸¸.·
    1. 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
      
      1. 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

        --
             *®*´¯`·.¸¸.·
        1. 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
          
          -- 
               \*®\*´¯`·.¸¸.·
          
          1. 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