Siramon: Style mit Javascript auslesen

Hallo Forum,

Ich möchte mit JavaScript einen zuvor gesetzten Style innerhalb eines SVG-Dokuments auslesen. Der Style wurde _nicht_ inline gesetzt (also nicht Attribut: style=""), sondern es wurde eine Klasse definiert (innerhalb von <defs><style></style></defs>) im gleichen Dokument. Die netten (TM) Browser bieten dafür die Funktion getComputedStyle - so weit so gut. Das böse (TM) Plugin von Adobe bietet diese Funktion leider nicht. Gibt es auch für das böse (TM) Plugin von Adobe eine Möglichkeit, diesen Wert auszulesen?

Noch ein wenig Background: Es geht darum bei einem allfälligen Zoomen, die Konturen von Elementen gleich "dick" zu belassen (Deklaration: stroke-width). Dazu werden solche Elemente mit der Klasse "preserve-stroke" versehen und das wird dann unobstrusiv bei einem Zoom wieder korrigiert.

Ausprobiert habe ich schon vieles. Über fertige APIs wie z.B. Prototype, MochiKit etc. bis zu SVGWeb u.ä. Die einen lassen sich nicht ein SVG Dokument einbinden, die anderen sind dafür da on-the-fly ein SVG-Dokument zu erstellen (im DOM) und bieten alternative Renderer (Flash, VML etc.) an. Beides leider für meine Zwecke nicht wirklich hilfreich, da das SVG-Dokument schon besteht.

Ich bin selbst schon so weit gekommen, dass ich zwar über DOM Zugriff auf die StyleSheet deklarationen habe: z.B. in der Form *.preserve-stroke{stroke-width:40px}, damit das aber so funktioniert müsste ich einen Parser schreiben, der die ganze Cascade beachtet (weiter unten könnte ja noch ein rect.preserve-stroke kommen mit einer überschreibenden Deklaration...): im Prinzip das was getComputedStyle macht.

Und leider läuft die currentStyle-Variante (für XHTML & IE empfohlen) im Adobe SVG Plugin auch nicht wirklich :-(

Vielen Dank für eure Hilfe & ewig dankbar!

Grüsse
Siramon,
     ja der Penner aus Nr. 14

  1. Hallo!

    Ich habe leider im Moment keine Möglichkeit, das Plugin zu testen, aber kann es sein, dass das Adobe-Plugin die .currentStyle-Instanz für die jeweiligen SVG-Nodes anbietet wie ein nicht so netter (TM) Browser namens IE?

    Gruß, LX

    --
    RFC 1925, Satz 6a: Es ist immer möglich, einen weiteren Umweg einzufügen.
    RFC 1925, Satz 11a: Siehe Regel 6a
    1. Hallo LX,

      Ich habe leider im Moment keine Möglichkeit, das Plugin zu testen, aber kann es sein, dass das Adobe-Plugin die .currentStyle-Instanz für die jeweiligen SVG-Nodes anbietet wie ein nicht so netter (TM) Browser namens IE?

      Jepp das Plugin bietet diese Funktion an. Leider ist die Rückgabe der Funktion nur dann mit einem sinnvollen Wert versehen, wenn die Style-Angabe im Style-Attribut gemacht wurde (ich verwende Klassen), ansonsten ist der Rückgabewert leer.

      Die Funktion verhält sich hier im Plugin anders als im IE (in einer (X)HTML Umgegebung). Im IE liefert die Funktion den tatsächlichen Wert zurück. Dabei ist es egal ob der Wert über ein Style-Attribut oder über eine Klasse oder andere Selektoren gesetzt wurde.

      Grüsse
      Siramon,
           ja der Penner aus Nr. 14

  2. Noch ein wenig Background: Es geht darum bei einem allfälligen Zoomen, die Konturen von Elementen gleich "dick" zu belassen (Deklaration: stroke-width). Dazu werden solche Elemente mit der Klasse "preserve-stroke" versehen und das wird dann unobstrusiv bei einem Zoom wieder korrigiert.

    Falls du das svg in einem xhtml Kontext einsetzen willst, hast du da mal an das Attribute viewBox gedacht?

    mfG Felix Nehrke

    P.S.: Besuche unseren Blog:  http://www.pommes-blog.de

    --
    Manchmal gibs was neues :)
    fo:| ch:| rl:( br:> n4:? ie:( va:) de:> zu:) fl:( ss:| ls:[ js:)
    1. Hallo Felix,

      Falls du das svg in einem xhtml Kontext einsetzen willst, hast du da mal an das Attribute viewBox gedacht?

      Leider verwende ich SVG an dieser Stelle in einer eigenen Datei (image/svg+xml). Ich verstehe aber nicht ganz, wie mir hier das Attribut viewBox helfen könnte. Kannst du deine Idee noch ein wenig ausführen?

      Grüsse
      Siramon,
           ja der Penner aus Nr. 14