SVG:文档加载后运行脚本

时间:2011-10-05 21:19:04

标签: javascript javascript-events svg

我有一个SVG文档,我希望能够在其中包含一个脚本(使用<script>标记)。在这个脚本中,我想设置一个函数,当文档加载并可以进行操作时将调用该函数。

如果我使用HTML和JQuery进行此操作,我只需使用$(document).ready(...)。我希望在SVG文档中做同样的事情,但显然我不能以同样的方式使用JQuery。

总之,我正在寻找的是:

test.svg:

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
    <script type="text/ecmascript" xlink:href="myscript.js" />

    <!-- Rest of SVG body goes here -->
</svg>

myscript.js:

function init(evt) {
    var svgDocument = evt.target.ownerDocument;
    var svgRoot = svgDocument.documentElement;
    // Manipulate SVG DOM here
}

// --> Somehow attach init() function to onload event of SVG <--

我想尝试在脚本中执行此操作,而不是依赖于SVG定义中的显式onload="init()"。 (我想写一个可能包含在几个SVG中的脚本,而不需要知道脚本是如何工作的。)

4 个答案:

答案 0 :(得分:7)

这是一个例子

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg" onload='init(evt)'>
<script type="text/ecmascript">
function init(evt) {
var svgDocument = evt.target.ownerDocument;
var svgRoot = svgDocument.documentElement;
// Do whatever you like on svgRoot to manipulate your SVG DOM
}
</script>
</svg>

答案 1 :(得分:2)

也许'onload'是你正在寻找的事件。看here

答案 2 :(得分:2)

没有(但IE)阻碍您在SVG中嵌入的JS中使用标准DOM事件处理程序:

document.addEventListener('load', init);

对于IE,您通常使用attachEvent左右,但我不知道,如果IE(&gt; = 9)在SVG中支持此功能。

大多数情况下,SVG文件是独立的,因此DOMReady(也称为DOMContentLoaded)和加载事件并不是那么遥远(与HTML相比,必须加载数十个CSS文件和图像。)因此与使用加载事件的区别而不是DOMReady事件(遗憾的是尚未标准化稳定)将是可忽略的。除了我从未尝试过,如果浏览器甚至触发DOMReady事件,当加载SVG的DOM时。

答案 3 :(得分:2)

您可以尝试将脚本包含在svg文档的最后,然后您不需要等待load事件。但是,如果您在脚本运行时引用尚未加载的文档中的任何外部文件,则可能会失败。