Как разделить методы java-скриптов между html и svg? - PullRequest
0 голосов
/ 22 декабря 2011

У меня есть HTML-страница, встроенная в .svg. Я написал большую часть логики в java-скрипте и хотел бы использовать один и тот же файл .js между файлами html и .svg:

Например: у меня есть следующее в mylogic.js:

var xmlDoc = null;
function loadXmlDoc() {
   xmlDoc = new XmlDoc.....
}

function onHtmlLoad() {
   loadXmlDoc();
}

function onSvgLoad() {
   xmlDoc.getElemementById(...
}`

и в HTML, я получил

<html>
<script src="mylogic.js"></script>
<body onLoad='onHtmlLoad();">
...
<object id='svgid' data='sample.svg'.../>
...
</body>
</html>

и java-скрипт, включенный в html-страницу, не виден во встроенном файле .svg, поэтому я должен снова включить их, как ...

<svg...onload="window.onSvgLoad();">
<script xlink:href="mylogic.js></script>
</svg>

, поскольку я дважды включил файл .js, я получаю xmlDoc как ноль внутри функции onSvgLoad (). Я считаю, что должен быть способ загрузить тот же экземпляр xmlDoc из html в svg. но я не понимаю ..?

В качестве альтернативы я попытался не включать файл .js в svg, вместо этого попытался изменить onload на onload = "window.top.onSvgLoad ();" ; затем onload = "window.parent.onSvgLoad ();" но все равно не сработало! * Обратите внимание, что я использую IE9 с его собственной поддержкой Html5.

1 Ответ

1 голос
/ 22 декабря 2011

JavaScript, включенный в html-страницу, виден из встроенного файла .svg. Удалите тег script из встроенного svg и вызовите нужные методы как parent.method, например. если mylogic.js имел

function hello()
{
    return "hello";
}

Вы могли бы написать

<script>
  alert(parent.hello());
</script>

во встроенном файле .svg, чтобы вызвать его.

...