2016-05-17 58 views
2

我想創建一個交互式的SVG HTML-Page。例如:如果我點擊一個矩形,我想顯示一個新的SVG圖像。通過HTML對象標記的交互式SVG

因爲我的SVG文件是分開的,我想通過HTML對象標籤包含它們。

我瀏覽了一會兒網,但我只是不ADRESS我的SVG-文件的單一元素,以改變他們的屬性或添加功能等

我的HTML文件:

<!DOCTYPE html> 
<html> 
<body> 
<object data="svg-test.svg" type="image/svg+xml" id="svg" width="100%" height="100%"></object> 

    <script> 
    window.onload=function() { 
    // Get the Object by ID 
    var svgObject = document.getElementById("svg"); 
    // Get the SVG document inside the Object tag 
    var svgDoc = svgObject.contentDocument; 
    // Get one of the SVG items by ID; 
    var svgItem = svgDoc.getElementById("svgID"); 
    // Set the colour to something else 
    svgItem.setAttribute("fill", "lime"); 
    }; 
    </script> 


</body> 
</html> 

的SVG-文件:

<svg width="900" height="600" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink"> 

    <rect x="100" y="120" width="200" height="350"  
    style="fill:white;stroke:black;stroke-width:2;fill-opacity:1.0;stroke-opacity:1.0" 
    id="svgID"/> 

</svg> 

而不是使用contentDocument我也試過getSVGDocument()但這也沒有奏效。

+0

在我的情況下,contentDocument不起作用(或者至少不是在某些瀏覽器中),因爲我還沒有等待(不僅僅是窗口)加載。請參閱:http://stackoverflow.com/a/15680844/5285945(我的評論也鏈接到另一個相關答案)。 –

+0

謝謝你的評論。我也試過\t''但它沒有奏效。 – SimpleFlow

+0

在你嘗試的第一件事情中,它需要是'svgDoc = a.contentDocument'而不是'svgDoc = contentDocument'(或者這可能只是一個轉錄錯誤?) –

回答

0

看來,鉻沒有問題加載對象時,沒有(本地)服務器設置。

我試過Microsoft Edge/IE,問題解決了。我可以訪問SVG文件中的所有元素。

+1

我想如果你使用的是Chrome。由於Chrome不允許xmlhttprequest請求本地文件。因此無法加載文件 可以將 - 允許文件從文件訪問 添加到chrome快捷方式的開始目標命令。這可以允許xmlhttprequest加載本地資源 – NuttLoose