2011-10-05 17 views
6

Bir SVG belgesine sahibim ve içine bir komut dosyası ekleyebilmek istiyorum (<script> etiketini kullanarak). Bu betiğin içinde, belge yüklendiğinde ve manipülasyon için kullanılabilir olduğunda çağrılacak bir işlev kurmak istiyorum.SVG: Belge yüklendiğinde komut dosyasını çalıştır

Bunu HTML ve JQuery ile yapıyor olsaydım, $(document).ready(...) kullanırdım. Ben bir SVG belgesi içinde aynı şeyi yapmak istiyorum ama açıkçası JQuery'yi aynı şekilde kullanamıyorum.

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: istediğim

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

ben aradığım Özetle

, gibi bir şey açık bir'e bağlı olmak yerine betik içinde bunu denemek ve yapmak SVG tanımında. (Komut dosyasının nasıl çalıştığına dair herhangi bir bilgiye gerek duymadan, çeşitli SVG'lere dahil edilebilecek bir komut dosyası yazmak istiyorum.)

cevap

2

Belki 'onload' olayınızdır. Bak İşte

+0

Muhtemelen, ama ben javascript üzerinden, ** SVG (veya en azından "

6

here bir örnektir

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

Teşekkürler. Bu benim elde etmek istediğim şey. Ancak yapmak istediklerim, '' etiketine 'onload =" ... "' eklemekten kaçınmaktır. Bunu daha net hale getirmek için asıl sorumu güncelledim (umarım). – FixMaker

2

Hiçbir şey (ancak IE) standart DOM olay SVG gömülü JS işleyicileri kullanmanızı engelleyen: Genellikle kullandığınız, IE için

document.addEventListener('load', init); 

attachEvent ya da öylesine, ama bilmiyorum, IE (> = 9) bunu SVG'de destekliyorsa.

Çoğunlukla, SVG dosyaları bağımsızdır, bu nedenle DOMReady (DOMContentLoaded) ve yükleme olayları bu kadar uzak değildir (HTML, CSS dosyalarının ve resimlerinin yüklenmesi gereken düzinelerce karşılaştırılmıştır.) Bu nedenle, yükün kullanımı arasındaki fark DOMReady olayı yerine (ki maalesef henüz standartlaştırılmamış olan) bir etkinlik, ihmal edilebilir. Bunun dışında hiç denemedim, eğer tarayıcılar SVG'nin DOM'si yüklendiğinde DOMReady olayını bile tetiklerlerse.

2

Komut dosyanızı svg belgesinin sonuna eklemeyi deneyebilirsiniz, ardından yük olayını beklemenize gerek yoktur. Ancak, betik çalıştırıldığında yüklü olmayan belge karnesindeki harici dosyalara başvuruyorsanız bu başarısız olabilir.

İlgili konular