Tengo un svg con, digamos, solo un elemento rect que tiene una llamada de función javascript en línea al hacer clic. He incrustado svg en mi html (basado en electrones) usando la etiqueta de objeto. El problema es que si escribo javascript fuera de svg, que debe llamarse al hacer clic en el elemento rect en svg, no encuentra la función definida, sino que arroja un error que dice que la función no está definida. Pero si pego el mismo script dentro de la etiqueta svg, funciona bien.
¿Por qué no se puede encontrar el script escrito fuera del alcance de svg?
html
<object class="svg" id="show-sld" data="sld_old.svg" type="image/svg+xml"> </object>svg con llamada de función javascript en línea
<svg> <rect style="opacity:1;fill:#000000;fill-opacity:0;" id="some-id" onclick="openDialog()"/> </svg>javascript
function openDialog(){ #do something }Funciona bien si pego el script anterior dentro de svg, pero eso no es lo que estoy buscando. Necesito traer javascript fuera de la etiqueta svg. ¿Cómo lograr esto?
Estoy escribiendo la declaración del problema y la respuesta en función de los comentarios.
svg busca la función dentro de su propio ámbito. Para hacer que svg mire a través de todo el dominio, simplemente agregue top.functionCall() donde top es la ventana superior en la jerarquía de ventanas
La solucion es
<svg> <rect id="some-id" onclick="top.openDialog()"/> </svg>