Pregunta

svg es un gráfico basado en xml y puede agregarle JavaScripts. He intentado acceder a las funciones de script definidas en un svg. El script en mi svg es algo como esto:

<svg ... onload="RunScript(evt);"...>
<script type="text/javascript">
...
function RunScript(loadEvent) {
  // Get object in my html by id
  var objElement = top.document.getElementById('objid1');
  if (objElement)
  {
    // Extend object tag object's methods
    objElement.SVGsetDimension  = setDimension;
    ...
  }
  function setDimention(w, h) {...}

En mi archivo html principal, el svg está incrustado en una etiqueta de objeto como esta:

<object id="objid1" data="mygrahic.svg" ... >
<a href="#" onclick="document.getElementById('objid1').SVGsetDimention(10, 10);
   return false;"
...>Set new dimention</a>...

Este funciona bien. Sin embargo, si se hace referencia al archivo svg xml mediante una URL completa (en otro sitio) como esta:

<object id="objid1" data="http://www.artlibrary.net/myaccount/mygrahic.svg" ... >

Los códigos ya no funcionan. Parece que no puedo adjuntar el método definido en mi script svg a un método en mi elemento de etiqueta de objeto html principal, o la parte superior o el documento no está disponible en este caso, o getElementById (..) simplemente no puede encontrar mi elemento de objeto en mi script svg. ¿Hay alguna forma de hacerlo en el script svg xml para encontrar mi elemento html?

No estoy seguro si este problema es causado por los diferentes DOM, y no hay forma de que los códigos de mi script svg descubran el objeto o elemento de otro DOM. Sería bueno si hay alguna solución.

¿Fue útil?

Solución

Creo que la pista podría estar en 'en otro sitio'. Hay reglas estrictas sobre cuándo los programas JavaScript de diferentes sitios pueden comunicarse con Teach Other. El SVG incorporado se trata de la misma manera que lo haría un documento dentro de un iframe .

Otros consejos

Entonces, lo que estás haciendo es, desde el punto de vista de un navegador, equivalente a lo siguiente:

<script>
function stealPassword() {
  var passwordInput = document.querySelector('input[type="password"]');
  var value = passwordInput.value; // My password!
  sendPasswordToServerToStealMyMoney(value);
}
</script>
<iframe src=mybank.com onload=stealPassword()></iframe>

Creo que entenderás por qué esto no es deseable. (Sin embargo, probablemente debería haber una advertencia o una excepción en la consola de errores).

pdc tiene este derecho. Los navegadores trabajan arduamente para evitar ataques de secuencias de comandos entre sitios (XSS) y este es el resultado. No puede ejecutar scripts en un documento cargado desde otro dominio, o usar otro puerto o protocolo. Para obtener más información, puede ver: http://en.wikipedia.org/wiki/Same_origin_policy

De mi experiencia; Su código es verdadero, por lo que se ejecuta exactamente. Mi PC Windows 7, IE9, instaló Adobe Viewer. Ambos a menos que SVG Viewer, IE9 SVG dibujó, pero no puede ejecutar SVG TAG Animation, Solo se puede ejecutar la animación de Javascript. Entonces, bajo Windows XP, IE8, instalé Adobe SVG Viewer, mismo resultado (ejecutar exactamente).

Firefox SVG no se puede ejecutar (animación SVG ecmascript) exactamente en mi PC.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top