2013-01-10 5 views
1

J'ai un fichier HTML nommé index.html, dans lequel j'ai inclus un svg (en utilisant l'object-tag) et un fichier js (en utilisant le script-tag). Les fonctions js fonctionnent parfaitement lorsqu'elles sont appelées dans le fichier HTML. Maintenant, quand je veux accéder à l'une de mes fonctions js dans le fichier svg, je dois lier le fichier js dans mon fichier svg (en utilisant xlink). Les fonctions fonctionnent toujours dans le fichier svg, mais dès que ces fonctions font référence à un élément du fichier HTML (par exemple document.getElementById ('div1')), elles ne fonctionnent plus (Ma supposition: Probablement parce que la fonction ne marche pas recherchez l'élément dans le code HTML, mais dans le fichier SVG.) Que puis-je faire pour que ces fonctions fonctionnent à nouveau?SVG et HTML avec fichier Javascript externe

+0

Une question similaire: http://stackoverflow.com/questions/14274252/combining-svg-html-and-javascript. –

Répondre

0

Lorsque vous intégrez une fonction JS dans un SVG, ils sont toujours exécutés dans le cadre privé du SVG, et ne peut donc accéder à quoi que ce soit en dehors de celui-ci. Lorsque vous voulez créer une application web interactive avec des SVG dynamiques, vous devez mettre les fonctions JS qui modifient le SVG dans le code javascript du HTML. Vous pouvez accéder à une arborescence de documents SVG à partir du javascript incorporé HTML en obtenant le .contentDocument de l'élément <object>.

+0

Le svg est un document distinct lors de l'utilisation , mais il est tout à fait possible d'accéder à des fonctions en dehors du svg tant que le document parent est pas contre-origine. 'window.parent.document' appelé à partir du document svg vous donne le document html parent. –

1

Dans les navigateurs modernes, vous pouvez simplement placer le svg directement dans le code HTML et JS (et CSS) fonctionnera de façon transparente sur les deux.

<div> 
    <svg:svg xmlns:svg="www.w3.org/2000/svg" version="1.1" height="100" width="100" viewBox="0 0 100 100"> 
    <svg:circle id="circle" cx="50" x="50" y="50"/> 
    </svg:svg> 
</div> 

<script> 
    document.getElementById("circle").style.fill="red"; 
</script> 
Questions connexes