2013-01-10 5 views
1

У меня есть HTML-файл с именем index.html, в который я включил svg (используя тег-объект) и js-файл (используя тег script). Функции js работают отлично, когда вызывается внутри HTML-файла. Теперь, когда я хочу получить доступ к одной из моих js-функций внутри svg-файла, мне нужно связать с js-файлом в моем svg-файле (используя xlink). Функции все еще работают внутри файла svg, но как только эти функции относятся к любому элементу в файле HTML (например, document.getElementById ('div1')), они больше не работают (Мое предположение: возможно, потому что функция doesnt найдите элемент внутри HTML, но внутри SVG-файла.) Что я могу сделать, чтобы эти функции снова работали?SVG и HTML с внешним Javascript-файлом

+0

Аналогичный вопрос: http://stackoverflow.com/questions/14274252/combining-svg-html-and-javascript. –

ответ

0

Когда вы внедряете JS-функцию в SVG, они всегда выполняются в частной области SVG и, следовательно, не могут получить доступ к чему-либо за ее пределами.

Если вы хотите создать интерактивное веб-приложение с динамическими SVG, вы должны поместить функции JS, которые изменяют SVG в javascript-коде HTML. Вы можете получить доступ к дереву документов SVG из встроенного javascript в HTML, получив .contentDocument элемента <object>.

+0

svg является отдельным документом при использовании , но вполне возможно получить доступ к функциям вне svg, пока родительский документ не является перекрестным. 'window.parent.document', вызванный из документа svg, дает вам родительский html-документ. –

1

В современных браузерах вы можете просто разместить svg непосредственно в HTML, а JS (и CSS) будет работать без проблем на обоих.

<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> 
Смежные вопросы