micha: zugriff auf frame

hallo,

ich habe ein asp-svg-javascript problem das mich schon mehrere tage beschäftigt:

in einem frameset bestehend aus 4 active-server-pages (asp) die jeweils eine svg-graphik aus einer datenbank generieren möchte ich von einem frame auf einen anderen via javscritp zugreifen zugreifen. leider funktioniert das nicht.

die bekannte sytax zielframe=parent.mainFrame.document funktioniert nicht (mainframe ist der zielframe).

will ich ein svg-dokument ansprechen muß ich weiterhin "document['Name_im_SVG_tag'].getSVGDocument() angeben. das geht aber nur innerhalb ein und desselben frames.

ich habe es mit:
zielframe=parent.mainframe.document['Name_im_SVG_tag'].getSVGDocument()
und diversen abwandlungen probiert. aber ich kann immernochnicht auf das dokument zugreifen. habe schon versucht bei anderen leuten abzuschauen aber einen frameset mit dieses parametern habe ich noch nicht entdeckt.

hoffe jemand kann mir helfen, da nun der ehrgeiz ausgebrochen ist.

danke danke danke!

micha

  1. Hallo,

    will ich ein svg-dokument ansprechen muß ich weiterhin "document['Name_im_SVG_tag'].getSVGDocument() angeben. das geht aber nur innerhalb ein und desselben frames.

    ich habe es mit:
    zielframe=parent.mainframe.document['Name_im_SVG_tag'].getSVGDocument()
    und diversen abwandlungen probiert. aber ich kann immernochnicht auf das dokument zugreifen.

    var svgobj=parent.frames["framename"].document.getElementById("svgid").getSVGDocument();

    sollte mit <object id="svgid" data="abc.svg" ... type="image/svg+xml">Alternativinhalt</object> funktionieren. Je nach Verschachtelung der Frames kommt auch top.frames["..."]... in Betracht.

    svgdoc enthaelt die Referenz auf das SVGDocument-Object.

    MfG, Thomas

    1. [Nachtrag:]

      svgdoc enthaelt die Referenz auf das SVGDocument-Object.

      svgobj war gemeint.

      MfG, Thomas

      1. hallo thomas, danke für deien nachricht,

        leider meinte ich das nicht. die svg-datei, die referenziert werden soll, ist keine html-datei, die eine eingebundene svg-datei enthält. sie ist nur eine svg-datei (d.h. kein <html>-tag o. ä.

        das gleiche problem beschreibt andré unter http://svg.ilog.fr/mhonarc/svg-coders/msg00024.html

        hoffe, du kannst mir helfen.

        besten dank schon jetzt...

        beste grüße...

        micha

        1. Hallo,

          leider meinte ich das nicht. die svg-datei, die referenziert werden soll, ist keine html-datei, die eine eingebundene svg-datei enthält. sie ist nur eine svg-datei (d.h. kein <html>-tag o. ä.

          Dann fehlen aber der top|parent.frames["..."].document-Kontext und somit alle weiteren Referenzen.

          das gleiche problem beschreibt andré unter http://svg.ilog.fr/mhonarc/svg-coders/msg00024.html

          ... und hat im/seit Mai 2002 keine brauchbare Antwort erhalten und ich vermute mal, dass es mangels document-Object auch so nicht machbar ist. Es fehlt einfach der Ast am (DOM-)Baum zum andocken ...

          Loesungsvorschlag:
          Im Ausgangsposting schreibst Du, dass das SVG-Dokument dynamisch via ASP generiert wird. Somit waere es doch problemlos machbar, ein kleines HTML-Grundgeruest mit dem eingebetteten SVG-File zu erzeugen. Dann klappt die Referenzierung in der von mir beschriebenen Weise. Ich habe die SVG-Ausgabe bei diesem Projekt analog mit PHP realisiert: http://ktd.et.fh-merseburg.de/~tm/mspec/.

          MfG, Thomas

          --
          SVG - Learning By Coding
          http://www.datenverdrahten.de/svglbc/
          1. alles klar, danke dir.... versuche es so...

            micha

          2. entschuldige thomas,

            noch eine frage: wenn ich die svg-datei in eine html datei einbette kann dies auf keinen fall via link zu einer externes svg-datei erfolge (da ja der inhalt der svg-datei dynamisch ist). gibe es also eine möglichkeit die die svg-datei in die html-datei richtig einzubetten also unter
            <object id="bla" ...>
            ...
            ...
            hier steht der svg-code
            ..
            ..
            ..
            <% asp-svg-kram `%>
            ...
            ...
            </object>

            ????

            danke dir...

            almaz

            1. Hallo,

              gibe es also eine möglichkeit die die svg-datei in die html-datei richtig einzubetten also unter
              <object id="bla" ...>
              ...
              ...
              hier steht der svg-code

              Weise dem data-Attribut direkt das SVG-erzeugende Script zu:

              <object id="..." data="abc.asp" height="..." width="..." type="image/svg+xml">
              Alternativinhalt
              </object>

              abc.asp schreibt direkt den SVG-Code heraus. Darin sollte am Anfang die Ausgabe von Content-type: image/svg+xml stehen.

              MfG, Thomas

              1. also thomas,

                habe es probiert, wie du es beschrieben hast:

                ==> frameset:

                <frameset rows="15%,*,8%" cols="*" framespacing="0" frameborder="NO" border="0">
                  <frame src="up.asp" name="topFrame" scrolling="NO" noresize >
                  <frameset rows="*" cols="9%,*,25%" framespacing="0" frameborder="NO" border="0">
                    <frame src="left.asp" name="leftFrame" scrolling="NO" noresize>
                    <frame src="main.asp" name="mainFrame">
                    <frame src="right.asp">
                  </frameset>
                  <frame src="down.asp" name="bottomFrame" scrolling="NO" noresize>
                </frameset>

                ==> Datei main.asp:

                <html>
                <head>
                </head>
                <body>
                   <object id="karte" data="themap.asp" type="image/svg+xml" height="100%" width="100%"></object>
                </body>

                ==> gekapselte datei themap.asp:

                <%Response.AddHeader "Content-Type","image/svg-xml"%>
                <svg width="100%" height="100%" viewBox="5300000 -5735000 180000 180000" id="svgAll" name="svgAll" onmousemove="showCoords(evt)" onzoom="resetCoords()" onscroll="resetCoords()" onload="initMap(evt)" preserveAspectRatio="xMidYMid meet"
                     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
                <script xlink:href="..\js\functions.js" type="text/ecmascript" />
                <defs>
                ...
                ...
                </svg>

                ==> aufruf im javascript:
                var thetest = parent.frames["mainFrame"].document.getElementById("karte").getSVGDocument();

                ==> nehme ich thetest auseinander wird ein object bis ".document" zurückgegeben, danach fehlermedlung: das objekt unterstützt die methode nicht.

                ==> habe es mit folgendem Versuch probiert:

                var thetest = parent.frames["mainFrame"].document.getElementsByName("karte").getSVGDocument();

                beim auseinandernehmen der syntx wird bis ".getElementsByName("karte")" ein objekt zurückgegeben. hänge ich (wie oben) noch ".getSVGDocument()" ran kommt fehlermeldung: das objekt unterstützt eigenschaft oder methode nicht!

                hoffe du weißt rat,

                ein
                am boden zerstörter...

                1. Hallo,

                  beim auseinandernehmen der syntx wird bis ".getElementsByName("karte")" ein objekt zurückgegeben. hänge ich (wie oben) noch ".getSVGDocument()" ran kommt fehlermeldung: das objekt unterstützt eigenschaft oder methode nicht!

                  Ich habe das mal online mit PHP nachgestellt und leider kommt man offenbar nicht an das SVGDocument-Object von aussen heran.
                  http://www.datenverdrahten.de/test/svg/frameset.htm (Fehlermeldung "Unbekannter Fehler" beim Klick auf "Test" im rechten Frame).

                  Es klappt nur dann, wenn man lokal ein HTML-Dokument mit SVG-Einbettung verwendet.
                  http://www.datenverdrahten.de/test/svg/test.htm funktioniert lokal problemlos, online gibt es die Fehlermeldung "Unbekannter Fehler" beim Klick auf "Test". Offline erscheint [object SVGDocument].

                  Das problem liegt vermutlich am Adobe SVG Viewer und dessen Objekthandling. Vielleicht suchst Du Dir eine andere Loesung, die das Scripting im SVG-Dokument selbst realisiert.

                  MfG, Thomas

                  --
                  SVG - Learning By Coding
                  http://www.datenverdrahten.de/svglbc/
                  1. [Nachtrag:]

                    Das problem liegt vermutlich am Adobe SVG Viewer und dessen Objekthandling.

                    Es funktioniert bei Verwendung von embed statt object:
                    http://www.datenverdrahten.de/test/svg/frameset1.htm, was aber wiederum aergerlich ist, da ich embed nicht verwenden mag ...

                    MfG, Thomas

                    1. [Nachtrag2:]

                      Es funktioniert bei Verwendung von embed statt object:
                      http://www.datenverdrahten.de/test/svg/frameset1.htm, was aber wiederum aergerlich ist, da ich embed nicht verwenden mag ...

                      Um alle Moeglichkeiten ausgeschoepft zu haben, hier noch der Versuch mit iframe-Einbettung: http://www.datenverdrahten.de/test/svg/frameset2.htm.

                      An das IFrame-Objekt kommt man problemlos heran:
                      top.frames["mainFrame"].frames["karte"]

                      Der Zugriff auf top.frames["mainFrame"].frames["karte"]
                      .getSVGDocument() scheitert ...

                      MfG, Thomas

                    2. hallo thomas,

                      habe dein beispiel gesehen. warum magst du den embed-tag nicht? dein beispiel funktioniert bei mir wunderbar!

                      allerdings (ich trau es mir nicht zu sagen) übertrage ich es analog zu dem meinigen geht wieder alles bis zum string:

                      test=parent.mainFrame.document;

                      hänge ich an den string noch ".karte" an kommt auch schon die meldung:
                      "undefinied!"

                      ich verzweifle nochmal!

                      habe sogar dein script 1:1 kopiert (außer php-endung, die habe ich nach asp umbenannt) und es funktioniert nicht!

                      wahrscheinlich stelle ich mich zu blöd an.

                      hier nochmal meine syntax (oder vielmehr deine):

                      ==> frameset: INDEX.ASP
                      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
                      <html>
                      <head>
                      <title>ISGV - Historisches Ortsverzeichnis v.1.0 SVG Viewer</title>
                      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                      </head>
                      <frameset rows="15%,*,8%" cols="*" framespacing="0" frameborder="NO" border="0">
                        <frame src="up.asp" name="topFrame" scrolling="NO" noresize >
                        <frameset rows="*" cols="9%,*,25%" framespacing="0" frameborder="NO" border="0">
                          <frame src="left.asp" name="leftFrame" scrolling="NO" noresize>
                          <frame src="main.asp" name="mainFrame">
                          <frame src="right.asp">
                        </frameset>
                        <frame src="down.asp" name="bottomFrame" scrolling="NO" noresize>
                      </frameset>
                      <noframes><body>
                      </body></noframes>
                      </html>

                      ==> RIGHT.ASP
                      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                      <html>
                      <head>
                      <title>Test by TM 03/03</title>
                      <script language="JavaScript" type="text/javascript">
                      <!--
                      function getSVG()
                      {
                        var test;
                        test=parent.frames["mainFrame"].document.karte.getSVGDocument();
                        alert(test);
                      }
                      //-->
                      </script>
                      </head>
                      <body>
                      right.asp
                      <br><br>
                      <a href="javascript:getSVG()">Test</a>
                      </body>
                      </html>

                      ==> MAIN.ASP
                      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                      <html>
                      <head>
                      <script language="JavaScript" type="text/javascript">
                      function getSVG()
                      {
                        var test;
                      //  test=document.getElementById("karte").getSVGDocument();
                      //  test=document.karte.getSVGDocument();
                          test=document.karte.getSVGDocument();
                          alert(test);
                      }
                      </script>
                      </head>
                      <body>
                      <a href="javascript:getSVG()">Test</a>
                      <!--
                      <object id="karte" id="karte" data="themap.asp" width="100%" height="100%" type="image/svg+xml">
                      Alternativinhalt
                      </object>
                      -->
                      <embed name="karte" id="karte" src="themap.php" type="image/svg+xml" width="100%" height="100%"></embed>
                      </body>
                      </html>

                      habe embed noch um das attribut "name" ergänzt.

                      vielleicht ist ja ein fehler augenscheinlich. danke dir für deine hilfe! und entschuldige meine inkompetenz!

                      michael

                      1. Hallo,

                        habe dein beispiel gesehen. warum magst du den embed-tag nicht? dein beispiel funktioniert bei mir wunderbar!

                        embed ist nicht Standard-konform, wobei ich nichts dagegen habe, wenn es einer Problemloesung dient.

                        habe sogar dein script 1:1 kopiert (außer php-endung, die habe ich nach asp umbenannt) und es funktioniert nicht!

                        Ich habe mal das Testmaterial zusammengepackt: http://www.datenverdrahten.de/test/svg/svg_php.zip.

                        Vielleicht hilft das beim Nachvollziehen mit ASP.

                        MfG, Thomas