Доступ к скриптам SVG - PullRequest
       14

Доступ к скриптам SVG

2 голосов
/ 29 октября 2008

svg - это основанная на XML графика, и вы можете добавить к ней JavaScripts. Я попытался получить доступ к функциям сценария, определенным в SVG. Сценарий в моем SVG выглядит примерно так:

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

В моем основном html-файле svg встроен в тег объекта, например:

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

Этот работает отлично. Однако если на файл svg xml ссылается полный URL-адрес (на другом сайте), например:

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

коды больше не работают. Похоже, что я не могу присоединить метод, определенный в моем скрипте svg, к методу в моем основном элементе тега html-объекта, или вершина или документ в этом случае недоступны, или getElementById (..) просто не может найти мой элемент объекта в мой svg скрипт Можно ли каким-либо образом сделать в сценарии svg xml свой элемент html?

Не уверен, вызвана ли эта проблема различными DOM, и у моих кодов сценариев svg нет возможности выяснить объект или элемент другого DOM. Было бы хорошо, если есть какое-либо решение.

Ответы [ 4 ]

4 голосов
/ 29 октября 2008

Я думаю, что ключ может быть в «на другом сайте». Существуют строгие правила, когда программам JavaScript с разных сайтов разрешается общаться с другими. Встроенный SVG обрабатывается так же, как и документ внутри iframe.

2 голосов
/ 18 августа 2010

Итак, то, что вы делаете, с точки зрения браузера эквивалентно следующему:

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

Я думаю, вы поймете, почему это нежелательно. (Вероятно, в вашей консоли ошибок должно быть предупреждение или исключение.)

1 голос
/ 29 октября 2008

PDC имеет это право. Браузеры прилагают все усилия, чтобы предотвратить атаки межсайтовых скриптов (XSS), и это результат. Вы не можете выполнять сценарии в документе, загруженном из другого домена, или используя другой порт или протокол. Для получения дополнительной информации вы можете увидеть: http://en.wikipedia.org/wiki/Same_origin_policy

0 голосов
/ 04 ноября 2011

Из моего опыта; Ваш код верен, так что запускайте точно. У меня на компьютере Windows 7, IE9, установлен Adobe Viewer. Оба, кроме SVG Viewer, IE9 SVG отрисованы, но не могут запустить SVG TAG Animation, только может запустить анимацию Javascript. Итак, под Windows XP, IE8, установлен Adobe SVG Viewer, тот же результат (работает точно).

Firefox SVG не может работать (анимация SVG ecmascript) точно под моим ПК.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...