2013-02-09 81 views
0

我試圖將JS處理程序添加到某些SVG的子項中。我在SVG中使用以下代碼:將onlick事件的外部處理程序添加到SVG元素

<script type="text/javascript" id="script3079"> 
    addClickEvents(); 

    function addClickEvents() { 
     var keys = document.getElementsByTagName('path'); 
     for (var i=0; i &lt; keys.length; i++){ 
      keys[i].addEventListener('click', keyClicked); 
     } 
    } 

    function keyClicked(e) { 
     var node = e.target; 
     alert(node.id); 
    } 
    </script> 

而且它工作正常。但現在我想從外部調用函數的JavaScript文件:

//myfile.js 
function keyClickedExternal(e) { 
    alert('keyClickedExternal'); 
} 

當然是通過script標籤貼在我的HTML。

我嘗試以下綁定:

keys[i].addEventListener('click', keyClickedExternal); //keyClickedExternal undefined 
keys[i].addEventListener('click', parent.keyClickedExternal); //keyClickedExternal undefined 
keys[i].addEventListener('click', top.keyClickedExternal); //keyClickedExternal undefined 
keys[i].addEventListener('click', parent.keyClickedExternal); //keyClickedExternal undefined 

我檢查DOM:

parent.window.document //access violation 
window.document //refers to SVG document 
document //the same as previous 

最後,我不知道如何處理外部綁定到SVG孩子。

+0

是你的svgs和js文件來自同一個域提供?你可能想檢查http://en.wikipedia.org/wiki/Same_origin_policy – drinchev 2013-02-09 09:26:17

+0

是的。此外,現在我運行它沒有任何網絡服務器,就像我的電腦中的文件(使用file:///鏈接) – 2013-02-09 09:30:39

+2

你在Chrome上的權利?它將不同的本地文件視爲不同的域。您需要使用網絡服務器或不同的UA。 – 2013-02-09 09:32:56

回答

1

As @Robert Longson表示問題與Chrome的安全性有關 - 它將其他本地文件視爲不同的域。使用網絡服務器,Luk。

0

你應該在每一個JavaScript文件的開頭行添加document.domain = 'Your_domain_name'; ,我還建議閱讀crossdomain.xml文件,從不同的域名運行腳本(如:statics.yourdomain.com包括靜態CSS,JS,IMG文件)

PS:對不起,遲到的答覆,我一直在尋找別的東西,看到您的問題依然未回答

相關問題