Как вызвать функцию в родительском HTML-документе из встроенного SVG

Я новичок в svg, и мне нужно выполнить с ним задачу, но у меня много проблем.

У меня есть svg (например, карта) с областями, определенными путями.

Моя цель - вызвать onClick функцию, внешнюю по отношению к svg, для выполнения каких-либо действий (например, путем получения ajax данных о некоторых людях, относящихся к выбранной области, и показа их вне svg на html-странице).

То, что я не могу сделать, это вызвать функцию, определенную вне svg, из элемента svg.

Я могу сделать это, если я добавлю svg inline, но мне нужно использовать тег embed, чтобы он работал, например, плагин Adobe. Любое предложение? Заранее спасибо

 feeela07 мая 2012 г., 18:06
… Но jQuery не был создан для работы с SVG.
 Alex07 мая 2012 г., 18:29
К сожалению, svg слишком сложный, и у меня проблемы с обработкой его с помощью Рафаэля. Там нет обходного пути для достижения цели?
 mihai08 мая 2012 г., 23:26
Вы можете работать с DOM напрямую или использовать что-то вроде d3.js. Рафаэль также должен работать, если вы загрузите его корректно.
 qw3n07 мая 2012 г., 18:08
Возможно, вы захотите взглянуть на такую библиотеку, как Raphaeljs.com
 Sirko07 мая 2012 г., 18:02
Вы не можете выполнить JavaScript из SVG, если он встроен через<embed>, <img> или тому подобное.

Ответы на вопрос(1)

Решение Вопроса

этот пример.

Код внутри SVG выглядит следующим образом:

    document.getElementById("svgroot").addEventListener("click", 
                                                        sendClickToParentDocument,
                                                        false);

    function sendClickToParentDocument(evt)
    {
        // SVGElementInstance objects aren't normal DOM nodes, 
        // so fetch the corresponding 'use' element instead
        var target = evt.target;
        if(target.correspondingUseElement)
            target = target.correspondingUseElement;

        // call a method in the parent document if it exists
        if (window.parent.svgElementClicked)
            window.parent.svgElementClicked(target);
        else
            alert("You clicked '" + target.id + "' which is a " + target.nodeName + " element");
    }

И в родительском документе у вас есть скрипт с функцией, которую вы хотите вызвать, например:

function svgElementClicked(theElement)
{
    var s = document.getElementById("status");
    s.textContent = "A <" + theElement.nodeName + 
        "> element with id '" + theElement.id + 
        "' was clicked inside the <" + 
        theElement.ownerDocument.defaultView.frameElement.nodeName.toLowerCase() + 
        "> element.";
}

Ваш ответ на вопрос