作爲我的項目的一部分,我需要動態創建畫布,然後在畫布中繪製SVG文件(也是動態生成的) 。對於我的項目,我需要畫布覆蓋整個頁面,並使用SVG填充整個畫布。爲了提高瀏覽器的可比性,我將SVG的寬度和高度分別設置爲畫布的寬度和高度(按照這個答案https://stackoverflow.com/a/28692538來處理這個已知的Firefox bug https://bugzilla.mozilla.org/show_bug.cgi?id=700533),但是Firefox的畫布仍然是空白的(在Chrome,Safari ,和歌劇)。我想知道任何人都可以解釋這個問題。無法在Firefox中繪製SVG到HTMl5畫布(即使設置了高度和寬度)
我做了一個演示(不是我真正的SVG文件,但方法和問題相同)的小提琴。只是爲了顯示問題不是SVG,如果您將其複製出警報並粘貼到新的Firefox選項卡中,它將呈現得很好。我的Firefox版本是47.0 這應該是最重要的代碼的一部分。
img.onload = function() {
ctx.scale(ratio, ratio);
ctx.drawImage(img, 0, 0);
}
svg = "data:image/svg+xml,"+ "<svg xmlns='http://www.w3.org/2000/svg' width='"+canvas.width+"px' height='"+canvas.height+"px' viewBox='0,0,"+canvas.width+","+canvas.height+"' >" +
"<style type='text/css'> * { margin: 0; padding: 0; } p{background-color:blue;}</style>"+
'<rect x="10" y="10" width="100" height="100"/>' +
"</svg>"
img.src = svg
問題的全部小提琴演示:https://jsfiddle.net/9are9tzx/5/ 謝謝!
既然你說我的演示爲你工作,我再次檢查。這是我發現的。演示不工作在Firefox 47.0(這是我測試演示和我的項目),但演示在Firefox 46.0.1上運行得很好(我降級測試)。你用什麼版本?儘管如此,感謝您關於#的建議,但在發佈我的項目之前,我會毫不猶豫地編寫一個data:URI消毒劑。 – zevnicsca
我只是重新更新Firefox並重新啓動我的電腦,現在它適用於我(演示和我的項目)。在它出來後我確實得到了FF 47.0,所以也許我的版本不穩定,或者我的第一個更新是壞的或者什麼的。對於那個很抱歉! – zevnicsca
@zevnicsca,不需要自己編寫,'encodeURIComponent()'已經在你的'window'對象中。另外,一些UA需要編碼頭,因此唯一完整的跨瀏覽器的dataURI頭是'data:image/svg + xml; charset = utf8,'' – Kaiido