मेरे पास एक HTML5 कैनवास है जिस पर मैं एक svg से एक छवि खींचता हूं।जावास्क्रिप्ट: toDataUrl() फेंकना "सुरक्षा त्रुटि: चित्रित कैनवास निर्यात नहीं किया जा सकता है।"
एचटीएमएल
<canvas id="canvas" width="600" height="320"></canvas>
जावास्क्रिप्ट
var DOMURL = window.URL || window.webkitURL || window;
var data = '<svg xmlns="http://www.w3.org/2000/svg" width="600" height="320">'+
'<foreignObject width="100%" height="100%">'+
'<style>'+
'foreignObject {'+
'background-color: #000;'+
'color: #fff'+
'border-radius: 10px;'+
'}'+
'h1 {'+
'color: #2acabd;'+
'font: 25px arial;'+
'font-weight: bold;'+
'text-align: center;'+
'}'+
'h2 {'+
'margin: 0;'+
'color: #2acabd;'+
'font: 15px arial;'+
'}'+
'p {'+
'color: #fff;'+
'}'+
'</style>'+
'<div xmlns="http://www.w3.org/1999/xhtml" style="font-size: 40px;">'+
'<h1>Heading</h1>'+
'<div>'+
'<div id="details-wrapper">'+
'<h2>Full Name</h2>'+
'<p>Alan Johnson</p>'+
'<h2>Date of Birth</h2>'+
'<p>7th November 1988</p>'+
'<p><span id="user-id">34329483028493284093284432</span></p>'+
'</div>'+
'</div>'+
'</div>'+
'</foreignObject>'+
'</svg>';
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
img = new Image();
img.setAttribute("crossOrigin", "anonymous");
var svg = new Blob([data], {type: 'image/svg+xml;charset=utf-8'});
var url = DOMURL.createObjectURL(svg);
img.onload = function() {
ctx.drawImage(img, 0, 0);
DOMURL.revokeObjectURL(url);
console.log(canvas.toDataURL());
}
img.src = url;
(जे एस फिडल: https://jsfiddle.net/LondonAppDev/qnpcg8th/1/)
जब मैं canvas.toDataURL()
कहते हैं, मैं हो रही है अपवाद:
(index):98 Uncaught SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
मैंने इस अपवाद से संबंधित स्टैक ओवरफ़्लो पर कई अन्य प्रश्न और उत्तर देखे हैं। मेरी समस्या अलग है, क्योंकि (जैसा कि आप देख सकते हैं) मैं किसी भी समय अपने svg या कैनवास में किसी अन्य डोमेन से किसी भी छवियों सहित किसी भी छवि पर नहीं हूं।
मुझे समस्या का अनुमान है कि मैं DOMURL.createObjectURL
के साथ एक ऑब्जेक्ट यूआरएल बना रहा हूं।
मुझे पता है कि विभिन्न ब्राउज़रों में ऐसा करने के साथ कुछ संगतता समस्याएं हैं, हालांकि इस ऐप को केवल क्रोम में चलाने की आवश्यकता है। साथ ही, सीधे कैनवास पर पाठ खींचना एक विकल्प नहीं है, मुझे इसे एक svg के माध्यम से करना होगा।
कोई भी विचार है कि मैं इस मुद्दे के आसपास कैसे हो सकता हूं, और सफलतापूर्वक मेरे कैनवास का पीएनजी प्राप्त कर सकता हूं?
क्या आपने 'createObjectURL' के बजाय डेटा यूआरएल का उपयोग करने का प्रयास किया है? – Bergi