Unerwünschte Namespaces bei SVG-Markup bei Verwendung von XMLSerializer in JavaScript mit IE

8

Ich versuche, den XMLSerializer der JavaScript-DOM-API zu verwenden, um ein SVG-Element in sein repräsentatives Markup zu konvertieren .

Dies ist der grundlegende Code, der zum Erstellen und Serialisieren des Elements verwendet wird:

%Vor%

In Chrome, Firefox, Safari und Opera produziert es, was ich will:

%Vor%

Aber in Internet Explorer 9 bis IE11, bekomme ich das:

%Vor%

Es gibt zwei Probleme mit der Ausgabe von IE:

  1. Es gibt doppelte xmlns Attribute. Wenn ich die zweite Zeile des JavaScript weglasse, dann gibt es im IE nur ein xmlns -Attribut im Markup, aber in Firefox, Chrome, Safari und Opera fehlt das Attribut.
  2. Es fügt xml:NS1="" hinzu. Warum ist das? NS1: wird dann dem Attribut xmlns:xlink vorangestellt.

Ich denke, dass ich die Attribute auf die richtige Weise erstelle. Beispielsweise ist die Verwendung von setAttribute anstelle von setAttributeNS korrekt ( weitere Informationen ), und das zu ändern, scheint das Problem nicht zu beheben.

Alle Einsichten geschätzt.

Bearbeiten: ein verwandtes Problem diskutiert a Fehler in der Serialisierung von Chrome, der zum Wegfall von Namespaces führt Teilweise relevant für das erste Problem (obwohl alle anderen Browser gleich verhalten), aber nicht relevant für das zweite Problem.

    
Premasagar 26.10.2013, 18:05
quelle

1 Antwort

10

OK, ich denke ich habe es gelöst. Folgte dem Trail von diesem Post zu diesem WebKit-Fehlerbericht und diesen Test Fall .

Wenn ich das Skript zu diesem ändere, dann funktioniert es:

%Vor%

Ah Namespaces.

Aber es schlägt in einer älteren Version von WebKit fehl, die immer noch in Safari 6.05 und PhantomJS ( Fehlerbericht - jetzt behoben). Vermutlich ist das Update in das neueste Safari-Update integriert (ich habe es noch nicht überprüft).

    
Premasagar 26.10.2013, 18:25
quelle