請參閱下面的代碼 - 我試圖將內聯svg包含在我的網站中。我正在關注a neat suggestion以使用svg開關元素,以便在舊版瀏覽器上優雅地降級。這個想法是,支持svg的瀏覽器使用開關塊中的第一個元素;那些不會忽略所有svg標記,只顯示掩埋在開關塊的第二個元素(即外部對象標記)中的img。inline svg in html - 如何優雅地退化?
它的作品真的很好......只是我的SVG(即活頁樂譜)必然包括文本元素,他們得到渲染(還有foreignobject)由舊的瀏覽器。
諷刺的是,很容易在IE8及以下使用條件註釋來處理這個問題。
對於其他舊的瀏覽器我有一個JavaScript工作圍繞重新定義了類SVG的文本foreignobject內。它的工作原理...但它感覺像一個真正的黑客。
是否有更好的方法來做到這一點(JavaScript的好,一個CSS的解決方案,做SVG的文本的另一種方式......)?
反正這裏是代碼的梗概:
<html>
<head>
<!-- this deals with elements using the svgtext class in old IE browsers -->
<!--[if lte IE 8]>
<style type="text/css">
.svgtext { display: none; }
</style>
<![endif]-->
<style type="text/css">
.donotdisplay { display: none; }
</style>
</head>
<body>
<svg ...>
<switch>
<g>
<!-- the svg goes here -->
<text class="svgtext">this gets rendered unless I deal with it</text>
</g>
<foreignObject ...>
<script type="text/javascript">
window.onload=function(){
var inputs=document.getElementsByTagName('text');
for(i=0;i<inputs.length;i++){
inputs[i].className='donotdisplay';
}
}
</script>
<!-- the replacement img tag goes here -->
</foreignObject>
</switch>
</svg>
</body>
</html>
我想看看RaphaelJS,在具有規定特徵檢測的情況下 - 或許Modernizr的。也不用,但他們都值得一試。 – halfer
除了支持SVG的IE8之外,還有哪些其他的老款瀏覽器正在嘗試支持? –
@halfer - Modernizr將在整個文檔中添加一個'svg'或'no-svg'類,它可以在代碼或CSS選擇器中檢查。它不會自動修復這個問題,但它很容易檢查。 –