2017-05-28 16 views
0

ハイチャートで作成したグラフがあります。 インターネットエクスプローラでsvgをpngに保存する必要があります。 私はfollowコードから使用して、存在するセキュリティエラーie11。Internet Explorerでsvgをpngイメージに変換する方法は?

var canvas = document.createElement('canvas'); 
canvas.width = width; 
canvas.height = height; 
var ctx = canvas.getContext('2d'); 
var imgChart = document.createElement('img'); 
imgChart.setAttribute('src', 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svg)))); 
imgChart.onload = function() { 
    ctx.drawImage(imgChart, 0, 0); 
    var blobObject = canvas.msToBlob(); 
    window.navigator.msSaveBlob(blobObject, 'save.png'); 
}) 
+0

何が問題なのですか?あなたは 'と存在するセキュリティエラー'を意味しますか? –

+0

ctx.drawImage(imgChart、0、0); ieで動作していません – mrmr68

+0

IE9以降はサポートされています:https://msdn.microsoft.com/en-us/library/ff975414(v=vs.85).aspx –

答えて

1

は、私は満足デュープのターゲットが見つかりませんでしたので、私は答えとして、それを書き換えます:IEでキャンバスを汚染チェックしますdrawImage法によるSVG画像を描画


<セキュリティ上の理由からEdge。

この操作は、だから、かなり頻繁
(... IEは<foreignObject>をサポートしていませんが)SVG画像は、いくつかのXMLを解析するために暗示するので、ブラウザの何とか敏感であり、それはいくつかのトリッキーな要素を含めることができますSVGイメージが描画されるときにブラウザにセキュリティ制限が加えられ、すべてのエクスポートメソッドがブロックされます。

<foreignObject>が、これはクロムでもそうであった、その上に描画されたときが、画像はブロブから来た場合にのみ(implementation bug、彼らは最終的には完全にセキュリティ制限を活用。これは、サファリ> 9場合であり、とにかく)。
そして、IEで<エッジ、任意のSVG。

この問題を回避する唯一の方法は、SVGを解析してからthe canvas' methodsを使用して再現することです。

これは、すべてのなんとかですが、実装するためにいくつかの時間を取ることができますので、私はそれのように本当にないにもかかわらず、あなたはおそらくより良い正確んcanvgのようなライブラリを、使用していると思います。この(+キャンバスにレンダリングパースメソッド)。

+0

Ang4プロジェクトでCanvgを使用することは可能ですか? – anand

+0

@anand dunno ...しかし、私はなぜそうは思わない。 – Kaiido

+0

canvgパッケージ – anand

関連する問題