Question

svg est un graphique basé sur XML et vous pouvez y ajouter des scripts Java. J'ai essayé d'accéder aux fonctions de script définies dans un svg. Le script dans mon svg est quelque chose comme ça:

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

Dans mon fichier html principal, le svg est incorporé dans une balise d'objet comme celle-ci:

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

Celui-ci fonctionne bien. Cependant, si le fichier xml svg est référencé par une URL complète (sur un autre site), comme ceci:

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

les codes ne fonctionnent plus. Il semble que je ne puisse pas attacher la méthode définie dans mon script svg à une méthode de mon élément de balise d'objet HTML principal, ou que le haut ou le document ne soit pas disponible dans ce cas, ou getElementById (..) ne trouve tout simplement pas mon élément d'objet dans mon script svg. Existe-t-il un moyen de trouver mon élément html dans le script svg xml?

Je ne sais pas si ce problème est dû aux différents DOM, et mes codes de script svg ne disposent d'aucun moyen de déterminer l'objet ou l'élément d'un autre DOM. Ce serait bien s'il y avait une solution.

Était-ce utile?

La solution

Je pense que l'indice pourrait être "sur un autre site". Il existe des règles strictes concernant le moment où les programmes JavaScript de différents sites sont autorisés à communiquer avec les autres. Le fichier SVG intégré est traité de la même manière qu'un document à l'intérieur d'un iframe .

Autres conseils

Donc, ce que vous faites est, du point de vue d'un navigateur, équivalent au suivant:

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

Je pense que vous comprendrez pourquoi ce n'est pas souhaitable. (Cependant, il devrait probablement y avoir un avertissement ou une exception dans votre console d’erreur.)

pdc a ce droit. Les navigateurs travaillent d'arrache-pied pour empêcher les attaques XSS (Cross Site Scripting), et voici le résultat. Vous ne pouvez pas exécuter de scripts dans un document chargé à partir d'un autre domaine ou à l'aide d'un autre port ou protocole. Pour plus d'informations, vous pouvez consulter: http://en.wikipedia.org/wiki/Same_origin_policy

De mon expérience; Votre code est vrai, donc ça marche exactement. Mon PC Windows 7, IE9, a installé Adobe Viewer. Les deux sauf si SVG Viewer, IE9 SVG dessiné, mais ne peut pas exécuter SVG TAG Animation, seul peut exécuter Javascript Animation. Ainsi, sous Windows XP, IE8, Adobe SVG Viewer installé, Même résultat (exécution exacte).

Firefox SVG ne peut pas exécuter (animation SVmas ecmascript) exactement sous mon ordinateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top