2008-10-29 3 views
2

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

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

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

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

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

+0

С какими браузерами вы ориентируетесь и тестируете? Если у этих браузеров нет встроенной SVG-поддержки, в которой вы используете SVG-плагин (-ы)? – 2008-10-29 17:20:28

ответ

4

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

1

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

2

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

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

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

0

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

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

Смежные вопросы