mustapha: svg und javascript

Hallo zusammen

ich habe ein Problem beim Benutzen von geturl zum Einbinden einer SVG-Datei in einer Andere, und zwar nach dem geturl funktionniert nicht das innere Script (onclick oder onload), kann mir jemand helfen.

vielen dank im Vorraus.

Mustapha

  1. Hallo,

    ich habe ein Problem beim Benutzen von geturl zum Einbinden einer SVG-Datei in einer Andere, und zwar nach dem geturl funktionniert nicht das innere Script (onclick oder onload), kann mir jemand helfen.

    Die ASV-spezifische Methode ist mit getURL() benannt. Zeige mal etwas Code, um das Problem genauer eingrenzen zu koennen. Funktioniert der Code denn ueberhaupt, wenn die zweite SVG-Datei statisch eingebunden wird?

    Mein Periodensystem-Beispiel zeigt die Verwendung von getURL() fuer den ASV und alternativ von XMLHttpRequest() fuer Firefox 1.5.

    MfG, Thomas

    1. Hallo und dake schön für die schnelle Antwort, ich habe irgendwann ihre Seite "Datenverdrahten" getroffen und sie mir sehr geholfen.Die Interaktion funktionniert ohne problem, nach dem Einbinden durch getURL() kommt eine Fehlermeldung:"Objekt erwartet line:1 column:0"

      Die ASV-spezifische Methode ist mit getURL() benannt. Zeige mal etwas Code, um das Problem genauer eingrenzen zu koennen. Funktioniert der Code denn ueberhaupt, wenn die zweite SVG-Datei statisch eingebunden wird?

      -----------------------------------------------------------
      circle.svg :
      <?xml version="1.0" standalone="no"?>
      <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
      <svg width="400" height="400">
       <title>Ein Kreis wird groesser</title>
       <script type="text/javascript"><![CDATA[
        function machewas(){
           if(objekt=document.getElementById("circle1")) objekt.setAttribute('r','100');
           else alert('es gibt kein objekt');
       }
       ]]></script>
      <circle id="circle1" cx="150" cy="150" r="50" style="fill:yellow; stroke:black">
      </circle>
      <circle onclick="machewas();" cx="150" cy="250" r="20" style="fill:red; stroke:black">
      </circle>
      <text x="80" y="130" style="font: 16pt Arial;fill: black">Hallo .......</text>
      </svg>
      ----------------------------------------------------------------
      die aufrufende Methode:
      function anfrage_schicken(){
       //alert('Anfrage wird gesendet!!!');
       loadFile('circle.svg');
      }

      function loadFile (fileName) {
       getURL(fileName, fileLoaded);
      }

      function fileLoaded (data) {
       if(data.success){

      var node=parseXML(data.content,document); alert(data.content);
           var group = node.firstChild; alert(group);
           document.getElementById("view_Box").appendChild(group);
        //alert(node);
       }
       else{alert('schwerer Ladefehler');}

      }
      ////////////////////////////////////

      MfG Mustapha

      1. Hallo,

        Die Interaktion funktionniert ohne problem, nach dem Einbinden durch getURL() kommt eine Fehlermeldung:"Objekt erwartet line:1 column:0"

        Das eingebundene SVG-Dokument hat seinen eigenen document-Kontext incl. script-Bereich. Regiert wird das Dokument aber vom einbindenden SVG-Dokument und dessen Scope.

        Allerdings klappt das "Inline-Scripting":

        Ersetze mal

          
        <circle onclick="machewas(evt);" cx="150" cy="250" r="20" style="fill:red; stroke:black">
        

        durch

          
        <circle onclick="alert('Hallo Welt!')" cx="150" cy="250" r="20" style="fill:red; stroke:black">
        

        Wenn die Funktion machewas() in das enbindende Dokument eingefuegt wird, dann funktioniert es bei mir testweise im ASV 3.03.

        Das Auslesen der Funktion aus dem CDATA-Abschnitt nebst Einfuegen in den script-Kontext des anderen Dokuments bewirkt aber offenbar nichts.

        Probiere es alternativ mit zwei document-Objekten, die jeweils onload ueber evt.target.ownerDocument belegt werden.

        Eine weitere Idee waere, ein neues script-Element zu erzeugen und die relevante Funktion dort anzulegen.

        MfG, Thomas

        1. Hallo,

          super das klappt mit den folgenden beiden, bleibt aber immer die Funktion-"onload" hängend, einfach keine Reaktion auch über evt.target.ownerDocument, ich wäre sehr dankbar, wenn Sie noch vielleicht eine Idee haben für die "onload"-Funktion, weil ich brauche die zum Anzeigen der erste "Seite" der zu bindende SVG, diese SVG-Datei bringt mehrere Seiten mit und sie werden durch zwei Buttons gesteuert, ich habe viel versucht, kommt aber nichts raus :-(

          <circle onclick="alert('Hallo Welt!')" cx="150" cy="250" r="20" style="fill:red; stroke:black">

          
          >   
          > Wenn die Funktion machewas() in das enbindende Dokument eingefuegt wird, dann funktioniert es bei mir testweise im ASV 3.03.  
            
            
          MfG Mustapha  
          
          
          1. Hallo,

            super das klappt mit den folgenden beiden, bleibt aber immer die Funktion-"onload" hängend, einfach keine Reaktion auch über evt.target.ownerDocument, ...

            Mal zum Testen nach der Zeile
            document.getElementById("view_Box").appendChild(group);
            diese Zeile einfuegen
            top.clipboardData.setData("Text",printNode(document));

            und dann aus der Zwischenablage das Ergebnis holen. Wird der SVG-Code gespeichert und wieder aufgerufen, dann kommt auch der Funktionsaufruf zustande.

            Offenbar wird das DOM nicht vollstaendig aktualisiert. Ich habe mal versucht, das erste SVG-Element (welches das zweite als Kindelement enthaelt) mittels removeChild() zu entfernen und eine vorher angelegte Kopie ueber appendChild() wieder einzuhaengen -- leider ohne Aenderung. Man koennte noch alle Elemente mit document.getElementsByTagName("*") einzeln abgreifen und nacheinander neu in den DOM-Baum einfuegen ...

            Idee fuer einen Workaround: Alle JS-Funktionen der eingebundenen SVG-Dokumente ebenfalls im aufrufenden SVG-Dokument unterbringen.

            MfG, Thomas

            1. Hallo

              Ich danke Ihnen fuer Ihre Bemuehungen und Vorschlaege, ich werde vielleicht meine Methoden aendern ...

              MfG
              Mustapha

              1. Hallo.

                Ich danke Ihnen fuer Ihre Bemuehungen und Vorschlaege, ich werde vielleicht meine Methoden aendern ...

                Das Siezen zum Beispiel, zumindest hier bitte.
                MfG, at