Frage

SVG ist eine XML -basierte Grafik und Sie können JavaScripts dazu hinzufügen. Ich habe versucht, auf die in einem SVG definierten Skriptfunktionen zuzugreifen. Das Skript in meinem SVG ist ungefähr so:

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

In meiner Haupt -HTML -Datei ist das SVG in ein Objekt -Tag wie folgt eingebettet:

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

Dieser funktioniert gut. Wenn jedoch die SVG XML -Datei durch eine vollständige URL (auf einer anderen Seite) wie folgt verwiesen wird:

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

Die Codes funktionieren nicht mehr. Es sieht so aus Mein SVG -Skript. Kann ich im SVG XML -Skript eine Möglichkeit machen, mein HTML -Element zu finden?

Ich bin mir nicht sicher, ob dieses Problem durch die verschiedenen DOMs verursacht wird, und es gibt keine Möglichkeit, dass meine SVG -Skriptcodes das Objekt oder Element eines anderen DOM ermittelt haben. Es wäre schön, wenn es eine Lösung gibt.

War es hilfreich?

Lösung

Ich denke, der Hinweis könnte in 'auf einer anderen Seite' sein. Es gibt strenge Regeln darüber, wann JavaScript -Programme von verschiedenen Websites mit LEICS Other kommunizieren dürfen. Das eingebettete SVG wird genauso behandelt wie ein Dokument in einem iframe möchten.

Andere Tipps

Was Sie also tun, ist aus Sicht eines Browsers entspricht:

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

Ich denke, Sie werden verstehen, warum das nicht wünschenswert ist. (Es sollte wahrscheinlich eine Warnung oder eine Ausnahme in Ihrer Fehlerkonsole geben.)

PDC hat dieses Recht. Browser arbeiten hart, um Cross -Site -Skriptangriffe (XSS) zu verhindern, und dies ist das Ergebnis. Sie können keine Skripte in einem Dokument ausführen, das aus einer anderen Domäne geladen wurde, oder einen anderen Port oder Protokoll verwenden. Für weitere Informationen können Sie sehen: http://en.wikipedia.org/wiki/Same_Origin_policy

Aus meiner Erfahrung; Ihr Code ist wahr, so dass genau ausgeführt wird. Mein PC Windows 7, IE9, installierte Adobe Viewer. Beide, es sei denn, SVG Viewer, IE9 SVG gezeichnet, aber die SVG -Tag -Animation nicht ausführen, kann JavaScript -Animation nur ausführen. So installiert unter Windows XP, IE8, Adobe SVG Viewer, gleiches Ergebnis (genau ausführen).

Firefox SVG kann nicht genau unter meinem PC ausgeführt werden (SVG ECMascript -Animation).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top