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

svg - это графика на основе xml, и вы можете добавлять в нее сценарии Java. Я попытался получить доступ к функциям сценария, определенным в файле 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. Есть ли способ найти мой элемент html в svg xml script?

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

На какие браузеры вы ориентируетесь и тестируете? Если в этих браузерах нет встроенной поддержки SVG, чьи подключаемые модули SVG вы используете?

Charles Duffy 29.10.2008 20:20

Firefox использую прямо сейчас. Он хорошо показывает графику SVG. Это просто проблема сценария. Думаю, причиной может быть ответ pdc.

David.Chu.ca 29.10.2008 22:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
1 613
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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

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

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

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

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

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

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

Другие вопросы по теме