Hallo Leute,
erstmal die beiden Dateien um die es geht:
test.html:
<html>
<head>
<title>Hallo</title>
<script language="Javascript">
function setHook()
{
test_svg.clickHook = myHook;
}
function myHook(x, y)
{
alert('myHook (' + x + '/' + y + ')');
}
</script>
</head>
<body>
<object name="test_svg" data="test.svg" type="image/svg+xml">
<param name="src" value="test.svg">
</object>
<button onclick="setHook();"><div>setHook</div></button>
</body>
</html>
test.svg:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/
REC-SVG-20010904/DTD/svg10.dtd">
<svg width="310" height="140"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<script language="Javascript"><![CDATA[
function test(x, y)
{
alert('x: ' + x + ' y: ' + y);
}
var clickHook = test;
]]></script>
<g style="stroke:black;fill:black"
transform="translate(30,30)">
<rect name="sven" id="mark" x="0" y="0" width="10" height="10" onclick="clickHook(1,1);" />
<rect x="20" y="20" width="10" height="10" onclick="clickHook(2,2);" />
<rect x="40" y="40" width="10" height="10" onclick="clickHook(4,4);" />
</g>
</svg>
System:
Windows XP 32 Bit SP3, XAMPP 1.7.2
IE 8.0.60001.18702 (SVGView 3.02 Build 94), FF 3.5.1 + FireBug 1.4.3
Ausführort: localhost
Problembeschreibung:
Ich möchte das JavaScript-Code im Host-Dokument ausgeführt wird, wenn auf ein Element im Object-Tag (also dem SVG) geklickt wird.
Im Firefox funktioniert dieses Beispiel problemlos. Nach dem Klick auf den Button setHook wird die Variable clickHook im SVG korrekt gesetzt und jetzt durch einen Klick auf eins der Elemente ausgelöst.
In einer zweiten Variante habe ich das document-Object eingefügt. Dadurch wurde [b]test_svg.clickHook[/b] zu [b]test_svg.document.clickHook[/b]. Auch diese Variante funktioniert im Firefox.
Im Internet-Explorer ist davon leider nichts zu erkennen. Ich kann zwar in beiden Fällen die Variable erfolgreich setzen und sogar mittels des integrierten Entwicklertool wieder auslesen. Diese ist auch in beiden Fällen korrekt gesetzt, doch bei einem Klick auf eins der Elemente wird nicht die myHook ausgeführt, sondern die test Funktion.
Probiert habe ich mittels console.log (im FF+Firebug wie auch im Entwicklertool des IE8 verfügbar) mittels getElementById und getElementsByName auf einzelne Elemente zuzugreifen und den onclick-Handler von Hand einmal zusetzen. Das Entwicklertool sagt mir zwar das der Handler korrekt gesetzt wurde, aber es wird immer noch die falsche Funktion ausgelöst.
Gibt es eine Möglichkeit auf die Variablen im SVG bei dem Internet Explorer zuzugreifen?
Auf Abwärtskompatibilität (ff3 o. IE7) und andere Browser (Netscape und co.) kann ich verzichten.
Danke für jede Hilfe
Frank