micha: embed-tag SVG / javascript

hallo thomas,

hoffe du kannst mir noch sagen wie ich aus einem frameset, der einen frame enthält der wiederum eine embed-svg-datei enthält auf einen anderen frame zugreifen kann?! das javascript soll also aus der embed-svg-datei => frame (html) => frameset => anderes frame (html) => andere embed-svg-datei ansprechen.

der rest deiner vorschläge war wirklich gut und hat funktioniert.

micha

  1. Hallo,

    hallo thomas,

    Privatgespraeche? ;-)

    hoffe du kannst mir noch sagen wie ich aus einem frameset, der einen frame enthält der wiederum eine embed-svg-datei enthält auf einen anderen frame zugreifen kann?! das javascript soll also aus der embed-svg-datei => frame (html) => frameset => anderes frame (html) => andere embed-svg-datei ansprechen.

    Sollte in diese Richtung gehen:

    parent.frames["framename"].document.embeds["embed_name"].getSVGDocument();

    alternativ:
    {...}.document.embeds[index_ab_0].getSVGDocument();
    {...}.document.embed_name.getSVGDocument();

    parent ist hier das Elternelement des eingebetteten SVG-Dokuments und sofern der zweite Frame demselben Frameset angehoert, sollte das klappen. Ansonsten die Frame-Hierarchie ggf. bis top.frames[] hinauf- und wieder herunter steigen.

    MfG, Thomas

    --
    SVG - Learning By Coding
    http://www.datenverdrahten.de/svglbc/
    1. mmmhhhh,

      naja... irgendwie klappt das nicht.

      wenn ich von der eingebetteten svg-datei ausgehe, dann habe ich doch mit parent ersmal die html-datei, in der die svg-datei steckt. dann der parent davon und dann habe ich den frameset und dann gehen zum benachbarten frameset wiederherunter.

      also irgendwie:

      die datei=parent.parent.frames[name_des_zielframes].document.embeds["embed_name"].getSVGDocument();

      das sieht erstens irgendwie merkwürdig aus und zweites funktioneirt es nicht. (wobei zweitens daramtischer ist).

      mit
      parent.frames[name_des_zielframes].document.embeds["embed_name"].getSVGDocument();

      gehe ich doch schon von der html-datei (startframe) aus, oder?

      micha

      1. Hallo,

        das sieht erstens irgendwie merkwürdig aus und zweites funktioneirt es nicht. (wobei zweitens daramtischer ist).

        Probiere es von "oben herab":
        top.window.parent.frames.document...

        MfG, Thomas

        1. Probiere es von "oben herab":
          top.window.parent.frames.document...

          top.window.parent.frames["..."].document...

          MfG, Thomas

          1. hallo thomas,

            wie gesagt... bis
            var test = top.window.parent;

            gibt er noch ein Objekt zurück,
            bei
            var test = top.window.parent.frames["bottomFrame"];
            kommt schon nix mehr. es gibt aber ein Frame "bottomFrame".
            (gleiches beispiel wie frameset mit frames main.php, left.php, right.php, up.php, down.php)

            ich verzweifle...

            micha

            1. Hallo micha,

              ich verzweifle...

              Ich probiere es mal: top.frames["bottomFrame"] Zumindest erscheint mir das nach Lektüre von http://aktuell.de.selfhtml.org/tippstricks/javascript/fensterzugriff/index.htm sinnvoll.

              Christian

              --
              Hast Du einen Beitrag? Nur her damit!
              http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
              SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
              sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[
            2. Hallo,

              kommt schon nix mehr. es gibt aber ein Frame "bottomFrame".
              (gleiches beispiel wie frameset mit frames main.php, left.php, right.php, up.php, down.php)

              Stelle doch mal etwas konkretes online oder maile mir mal, was bei obigem Beispiel wohin soll. Hier findest Du eine Loesung, die ich mal fuer einen aehnlichen Versuch (aus dem SVG in einem Frame in das document-Object eines anderen Frames eingreifen) gepostet habe: http://forum.de.selfhtml.org/archiv/2003/1/36168/#m197635.

              Frage auch mal solche Sachen ab wie parent.frames.length, top.frames.length und dann konkreter parent.frames[index_ab_0].name
              oder parent.frames[index_ab_0].document usw.

              ich verzweifle...

              Das hat das Thema SVG aber nicht verdient ;-).

              MfG, Thomas

              1. [Nachtrag:]

                Hier findest Du eine Loesung, die ich mal fuer einen aehnlichen Versuch (aus dem SVG in einem Frame in das document-Object eines anderen Frames eingreifen) gepostet habe: http://forum.de.selfhtml.org/archiv/2003/1/36168/#m197635.

                Beim nochmaligen Lesen des Postings schwant mir auch ein Grund fuer Deine Probleme: aus dem SVG-Scripting-Kontext heraus braucht man die Referenzierung mit object.item(index_ab_0).

                Das hat mich am Anfang auch etwas irritiert. Ein in HTML unproblematisches docobject.getElementsByTagName("elementname")[0] ist unter SVG und DOM-konform(er) als docobject.getElementsByTagName("elementname").item(0) zu handeln.

                In diesem Script kommt das mehrfach vor: http://www.datenverdrahten.de/svglbc/?code=svgdomscripting.

                Aus dieser Richtung weht hier offenbar auch der Wind. Solange man in jeweils einer Welt bleibt (HTML||SVG) ist alles ganz einfach ;-).

                MfG, Thomas

                1. hallo thomas,
                  ich bin dumm. wenn ich mir dein beispiel anschaue greifst du ja nur auf svg-objekte in deinem script zu? das item[0] resp. [0] habe ich verstanden, der zusammenhang zu meinem problem - entschuldige - ist mir leider nicht klar.

                  leider kann ich dir das beispiel nicht online stellen.

                  ich versuche es mal mit ein paar codes:
                  =>frameset:
                  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
                  <html>
                  <head>
                  <title></title>
                  </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" name="rightFrame">
                    </frameset>
                    <frame src="down.asp" name="bottomFrame" scrolling="NO" noresize>
                  <noframes>
                  <body>
                  </body>
                  </noframes>
                  </frameset>
                  </html>

                  =>main.asp
                  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                  <html>
                  <head>
                  <link rel="stylesheet" type="text/css" href="default.css">
                  <script src="..\js\functions.js" type="text/javascript">
                  </script>
                  </head>
                  <body>
                  <embed name="karte" src="themap.asp" type="image/svg+xml" width="100%" height="99%">
                  </embed>
                  </body>
                  </html>

                  => in main.asp eingebundene datei "themap.asp":
                  <%Response.AddHeader "Content-Type","image/svg-xml"%>
                  <svg width="100%" height="100%" viewBox="5300000 -5735000 180000 180000" id="svgAll" name="svgAll" 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>
                  </defs>

                  => in main.asp eingebundene javascript-datei functions.js:

                  function tuwas()
                    {

                  var svgdoc_vom_frame_frame_right=top.frames("frameRight").document.infofield.getSVGDocument();
                    alert svgdoc_vom_frame_frame_right;
                    }

                  => die datei für den rechten frame:
                  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 //EN" "http://www.w3.org/TR/html4/frameset.dtd">
                  <html>
                  <head>
                  <title>Unbenanntes Dokument</title>
                  <script src="..\js\functions.js" type="text/javascript">
                  </script>
                  <link rel="stylesheet" type="text/css" href="default.css">
                  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                  </head>
                  <body>
                  <table width="100%" border="0">
                    <tr>
                      <td><embed height="100" src="ov.asp" type="image/svg+xml" width="100%"></td>
                    </tr>
                    <tr>
                      <td><embed name="coordinates" height="20" src="coords.asp" type="image/svg+xml" width="100%"></td>
                    </tr>
                    <tr>
                      <td><embed name="infofield" height="20" src="info.asp" type="image/svg+xml" width="100%"></td>
                    </tr>
                    <tr>
                  </table>
                  </body>

                  vielleicht kannst du mir das ja an einem beispiel erklären.

                  micha

                  1. Hallo,

                    ich bin dumm. wenn ich mir dein beispiel anschaue greifst du ja nur auf svg-objekte in deinem script zu? das item[0] resp. [0] habe ich verstanden, der zusammenhang zu meinem problem - entschuldige - ist mir leider nicht klar.

                    Ich habe das nochmals am Ausgangsbeispiel des anderen Threads probiert und in den oberen Frame noch ein up3.svg eingebaut. Darin laeuft ein Script, welches den unteren Frame anspricht und dann in dessen SVG-Dokument den mittleren Kreis mit einer neuen Farbe versieht (schwarz): http://localhost/selftest/svg_php/frameset3.htm.

                    Ich hoffe, num haben wir es.

                    MfG, Thomas

                      1. danke, danke, thomas,

                        habe jetzt zugriff auf das SVGobjekt. Du bist klasse!

                        jetzt verstehe ich auch das syntax-problem mit dem item!

                        danke dir nochmals!

                        micha

                        1. und warum das jetzt?

                          function change_text {
                              var SVGDoc2 = top.window.frames.item("rightFrame").document.infofield.getSVGDocument();
                              var aChild = SVGDoc2.getElementById("infoText");
                              aChild.getStyle().setProperty("visibility", "visible");
                              var Child = aChild.getFirstChild();
                              Child.setData('anders');
                          }

                          jetzt ändert er mir die sichtbarkeit, aber die textdaten ändert er nicht. bei child.setData('anders'); sagt er das er die daten nicht ändern kann. warum? hängt das wieder mit dieser item[0]-sache zusammen? bis Child gibt er mir immer ein objekt zurück.

                          der unwissende
                          micha

                          1. Hallo,

                            jetzt ändert er mir die sichtbarkeit, aber die textdaten ändert er nicht. bei child.setData('anders'); sagt er das er die daten nicht ändern kann. warum? hängt das wieder mit dieser item[0]-sache zusammen? bis Child gibt er mir immer ein objekt zurück.

                            Wenn die Variablen und die Objekthierarchie korrekt ist, sollte das so klappen. Ich habe das nochmals ins Beispiel frameset3.htm eingebaut.

                            MfG, Thomas

                            1. danke thomas,

                              nun funktioniert es. dein code scheint der gleiche wie der meinige zu sein. sie unterscheiden sich nur dahingehend das deiner funktioniert und meiner nicht.

                              wie auch immer.

                              ich danke dir!

                              micha