(SVG) Was macht Firefox anders?
Sebastian Philipp
- javascript
Hi,
Ich hab mich heute mal in Javascript versucht, allerdings nur mit mäßigem Erfolg. Vor allem der Firefox braucht vielleicht ein etwas weniger fehlerhaften Code. Laut DOM Inspector werden die mit appendChild erzeugen Kreise auch an die richtige Stelle eingefügt, nur ein getElementById gibt nur noch ein
Fehler: uncaught exception: [Exception... "Component returned failure code: 0x80004001 (NS_ERROR_NOT_IMPLEMENTED) [nsIDOMSVGSVGElement.getElementById]" nsresult: "0x80004001 (NS_ERROR_NOT_IMPLEMENTED)" location: "JS frame :: /*...*//test2.svg :: update :: line 14" data: no]
aus. wenn alles funktioniert, müsste ein roter kreis an position 100;390 auftauchen, wenn zeite 14 nicht geht müsste der kreis zumindest an position 0;390 sein, er ist aber gar nicht da - wieso? Mit der Exception kann ich wenig anfangen. Opera und Konqueror machen keine Probleme.
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:ev="http://www.w3.org/2001/xml-events"
version="1.1" baseProfile="full"
width="300" height="300" viewBox="-10 -10 420 420" onload="init(evt)" >
<defs>
<script type="text/ecmascript"><![CDATA[
var svgdoc,svgroot;
var ary = new Array(40);
function update()
{
var circle = "ci0";
svgroot.getElementById(circle).setAttribute("cx" ,100); //line 14
}
function init(load_evt)
{
svgdoc=load_evt.target.ownerDocument;
svgroot=svgdoc.documentElement;
var newCircle = document.createElement("circle");
newCircle.setAttribute("id" ,"ci0");
newCircle.setAttribute("cx" ,0);
newCircle.setAttribute("cy" ,390);
newCircle.setAttribute("r" ,5);
newCircle.setAttribute("fill" , "#ff0000");
newCircle.setAttribute("stroke-width" , "3px");
svgroot.appendChild(newCircle);
update();
}
]]></script>
</defs>
</svg>
hallo,
Fehler: uncaught exception: [Exception... "Component returned failure code: 0x80004001 (NS_ERROR_NOT_IMPLEMENTED) [nsIDOMSVGSVGElement.getElementById]" nsresult: "0x80004001 (NS_ERROR_NOT_IMPLEMENTED)"
Mit der Exception kann ich wenig anfangen.
Ich halte die Fehlermeldung für aussagekräftig. Deinem Firefox fehlt irgendein Plugin, das ihm ermöglicht, die gewünschte Ausgabe zu erzeugen.
Opera und Konqueror machen keine Probleme.
Es macht in einem solchen Fall Sinn, die Browserversionen anzugeben - und das Betriebssystem. SVG hat sich leider immer noch nicht so weit durchgesetzt, daß Browser und Plattform keine Rolle spielen und unerwähnt bleiben dürfen.
Grüße aus Berlin
Christoph S.
Hallo Sebastian,
Fehler: uncaught exception: [Exception... "Component returned failure code: 0x80004001 (NS_ERROR_NOT_IMPLEMENTED)
Du willst also ein Feature nutzen, das in Firefox (noch) nicht implementiert ist.
Mit der Exception kann ich wenig anfangen.
Noch klarer kann man es aber nicht sagen :-)
Opera und Konqueror machen keine Probleme.
die SVG-Unterstützung in den einzelnen Browsern ist unterschiedlich und ändert
sich von Browserversion zu Browserversion, siehe SVG-Comparison-Chart [1]
Freundliche Grüße
Vinzenz
[1] Danke, Orlando!
Hi,
Fehler: uncaught exception: [Exception... "Component returned failure code: 0x80004001 (NS_ERROR_NOT_IMPLEMENTED) [nsIDOMSVGSVGElement.getElementById]" nsresult: "0x80004001 (NS_ERROR_NOT_IMPLEMENTED)" location: "JS frame :: /*...*//test2.svg :: update :: line 14" data: no]
svgroot.getElementById(circle).setAttribute("cx" ,100); //line 14
War da nicht was, daß man bei XML mit den NS-Varianten arbeiten muß, also getElementByIdNS?
cu,
Andreas
War da nicht was, daß man bei XML mit den NS-Varianten arbeiten muß, also getElementByIdNS?
Error: svgroot.getElementByIdNS is not a function
Line: 14
auch ein getElementByIdNs gibts nicht. Was sind überhaupt ...NS-Varianten?
hallo,
Was sind überhaupt ...NS-Varianten?
Nix ;-)
Aber für "IDN" gibt es Definitionen, mit denen der IE7 was anfangen kann. Schau dir einfach mal die "Internetoptionen" im IE7 an.
Grüße aus Berlin
Christoph S.
Hallo
auch ein getElementByIdNs gibts nicht. Was sind überhaupt ...NS-Varianten?
NS wie
Name
Space
siehe auch:
http://developer.mozilla.org/en/docs/SVG:Namespaces_Crash_Course#Scripting_in_namespaced_XML
</archiv/2005/10/t116579/#m746098>
Freundliche Grüße
Vinzenz
Hallo MudGuard,
War da nicht was, daß man bei XML mit den NS-Varianten arbeiten muß, also getElementByIdNS?
Dann wohl eher SetAttributeNS, das gibts sogar tatsächlich. ;)
Jonathan
Hallo Sebastian,
function update()
{
var circle = "ci0";
svgroot.getElementById(circle).setAttribute("cx" ,100); //line 14
^^^
svgdoc
}
function init(load_evt)
{
svgdoc=load_evt.target.ownerDocument;
svgroot=svgdoc.documentElement;
var newCircle = document.createElement("circle");
^^^
var newCircle = svgdoc.createElementNS("http://www.w3.org/2000/svg","circle");
document statt svgdoc würde hier auch funktionieren, aber wenn es schon mal explizit definiert wurde ...
Grüße,
Thomas