2 Stimmen

Zugriff auf SVG-Skripte

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

...
function RunScript(loadEvent) {
  // Objekt in meinem HTML nach ID abrufen
  var objElement = top.document.getElementById('objid1');
  if (objElement)
  {
    // Erweitern der Methoden des Objekttags des Objekts
    objElement.SVGsetDimension  = setDimension;
    ...
  }
  function setDimention(w, h) {...}

In meiner Haupt-HTML-Datei wird das SVG in einem Objekttag wie folgt eingebettet:

Neue Größe festlegen...

Dies funktioniert einwandfrei. Wenn die SVG-XML-Datei jedoch mit einer vollständigen URL (auf einer anderen Website) referenziert wird, wie z.B.:

 funktionieren die Codes nicht mehr. Es scheint, als könnte ich die in meinem SVG-Skript definierte Methode nicht mit einer Methode in meinem Haupt-HTML-Objekttag-Element verknüpfen, oder das top oder document ist in diesem Fall nicht verfügbar oder getElementById(…) kann mein Objektelement in meinem SVG-Skript einfach nicht finden. Gibt es einen Weg, wie ich im SVG-XML-Skript mein HTML-Element finden kann?

Ich bin mir nicht sicher, ob dieses Problem durch die unterschiedlichen DOMs verursacht wird und es für meine SVG-Skriptcodes keinen Weg gibt, ein Objekt oder Element eines anderen DOMs zu erkennen. Es wäre schön, wenn es eine Lösung gäbe.

4voto

pdc Punkte 2266

Ich denke, der Hinweis könnte in 'auf einer anderen Seite' liegen. Es gibt strenge Regeln darüber, wann JavaScript-Programme von verschiedenen Websites erlaubt sind, miteinander zu kommunizieren. Das eingebettete SVG wird genauso behandelt wie ein Dokument innerhalb eines iframe würde.

2voto

Ms2ger Punkte 15130

Also, was du tust, ist aus Sicht eines Browsers folgendes Äquivalent:

function stealPassword() {
  var passwordInput = document.querySelector('input[type="password"]');
  var value = passwordInput.value; // Mein Passwort!
  sendPasswordToServerToStealMyMoney(value);
}

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

1voto

Prestaul Punkte 79893

Pdc hat es genau richtig. Browser arbeiten hart daran, Cross-Site-Scripting-Angriffe (XSS) zu verhindern, und das ist das Ergebnis. Sie können keine Skripte in einem Dokument ausführen, das von einer anderen Domain geladen wurde oder einen anderen Port oder ein anderes Protokoll verwendet. Weitere Informationen finden Sie unter: http://de.wikipedia.org/wiki/Same_origin_policy

0voto

saburou Punkte 1

Meiner Erfahrung nach; Dein Code ist korrekt, daher läuft er genau so. Mein PC hat Windows 7, IE9 und den Adobe Viewer installiert. Ohne den SVG Viewer funktioniert das SVG unter IE9, aber die SVG-TAG-Animation läuft nicht, nur die Javascript-Animation läuft. Also, unter Windows XP, IE8 und mit dem Adobe SVG Viewer installiert, das gleiche Ergebnis (läuft genau so).

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X