Pergunta

O SVG é um gráfico baseado em XML e você pode adicionar JavaScripts a ele. Eu tentei acessar as funções de script definidas em um SVG. O script no meu SVG é algo assim:

<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) {...}

No meu arquivo html principal, o SVG está incorporado em uma tag 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 bem. No entanto, se o arquivo SVG XML for referenciado por um URL completo (em outro site) como este:

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

Os códigos não funcionam mais. Parece que não posso anexar o método definido no meu script SVG a um método no meu elemento principal de tag de objeto HTML, ou o topo ou o documento não está disponível neste caso, ou getElementbyId (..) simplesmente não consigo encontrar meu elemento de objeto em Meu script SVG. Existe alguma maneira de fazer no script SVG XML para encontrar meu elemento HTML?

Não tenho certeza se esse problema é causado pelos diferentes DOMs e não há como meus códigos de script SVG descobrirem outro objeto ou elemento de DOM. Seria bom se houver alguma solução.

Foi útil?

Solução

Eu acho que a pista pode estar em 'em outro site'. Existem regras estritas sobre quando os programas JavaScript de diferentes sites podem se comunicar com o ensino de outros. O SVG incorporado está sendo tratado da mesma maneira que um documento dentro de um iframe gostaria.

Outras dicas

Então, o que você está fazendo é, do ponto de vista de um navegador, equivalente ao seguinte:

<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>

Eu acho que você entenderá por que isso não é desejável. (Provavelmente deve haver um aviso ou uma exceção em seu console de erro.)

O PDC tem esse direito. Os navegadores trabalham duro para evitar ataques cruzados de script (XSS) e esse é o resultado. Você não pode executar scripts em um documento carregado de outro domínio ou usando outra porta ou protocolo. Para mais informações, você pode ver: http://en.wikipedia.org/wiki/same_origin_policy

Da minha experiência; Seu código é verdadeiro, para que seja executado exatamente. Meu PC Windows 7, IE9, instalou o Adobe Viewer. A menos que o SVG Viewer, IE9 SVG desenhado, mas não pode executar a animação de tags SVG, só pode executar a animação JavaScript. Portanto, no Windows XP, IE8, instalou o Adobe SVG Viewer, o mesmo resultado (execute exatamente).

O Firefox SVG não pode ser executado (animação SVG ECMAScript) exatamente no meu PC.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top