내가 만난이 IE9 문제에 대한 해결 방법이 있는지는 잘 모르겠지만 여기에 내가하려고하는 것이있다. 내 페이지의 캔버스에 이미지가 있습니다. 이 캔버스 이미지를 다른 캔버스로 복사하고 싶지만 팝업 창에서 만듭니다. 이 실험에서 나는 캔버스 이미지를 동일한 페이지에 다른 동적으로 생성 된 캔버스에 복사 할 수 있다는 점을 알아 냈습니다. 하지만 팝업 창에서 시도 할 때 IE는 DOM 예외 : TYPE_MISMATCH_ERR (17)을 제공합니다. 안타깝게도 Chrome에서 동일한 코드를 실행했기 때문에 이것은 IE의 것 같습니다. 내 코드는 여기에 있습니다. 자신의 이미지를 제공해야하지만, 간단한 640x480 jpeg 파일을 사용했습니다. 내가 console.error를하고 있기 때문에 콘솔도 열려 있어야합니다. 또한이 코드를 로컬 IIS의 localhost에서 파일로 실행하려고했습니다.IE 팝업창의 캔버스 DOM 예외 : TYPE_MISMATCH_ERR (17)
<!DOCTYPE html>
<html>
<head>
<title>Canvas Copy Test</title>
<style>
#mainSrc {
border:1px solid red;
}
#dest01 {
width:640px;
height:480px;
border:1px solid blue;
}
</style>
<script>
var destWin; // Destination Window
window.onload=function()
{
var testImg = new Image();
testImg.src = "me.jpg";
testImg.onload = function()
{
var mainCanvas = document.getElementById("mainSrc");
var mainCtx = mainCanvas.getContext("2d");
mainCtx.drawImage(testImg,0,0);
}
var copyBtn = document.getElementById("copyBtn");
var copyWinBtn = document.getElementById("copy2WinBtn");
copyBtn.addEventListener("click",copyImage,false);
copyWinBtn.addEventListener("click",copy2Win,false);
}
// Copy Canvas Image to Another on the same page.
function copyImage()
{
var mainCanvas = document.getElementById("mainSrc");
var destCanvas = document.createElement("canvas");
var destDiv = document.getElementById("dest01");
destCanvas.width = mainCanvas.width;
destCanvas.height = mainCanvas.height;
var dCtx = destCanvas.getContext("2d");
dCtx.drawImage(mainCanvas,0,0);
destDiv.appendChild(destCanvas);
}
// Copy Canvas to Popup Window
function copy2Win()
{
var mainCanvas = document.getElementById("mainSrc");
try {
destWin = window.open("","destWin");
var destWinDoc = destWin.document;
var destWinHTML = "<!DOCTYPE html><html><head><title>POPUP</title><body><div id='destWinDiv' style='width:640px; height:480px; border:1px solid red'></div></body></html>";
destWinDoc.write(destWinHTML);
var destCanvas = destWinDoc.createElement("canvas");
var destDiv = destWinDoc.getElementById("destWinDiv");
destCanvas.width = mainCanvas.width;
destCanvas.height = mainCanvas.height;
var dCtx = destCanvas.getContext("2d");
dCtx.drawImage(mainCanvas,0,0);
destDiv.appendChild(destCanvas);
}
catch (err)
{
console.error(err);
}
}
</script>
</head>
<body>
<canvas id="mainSrc" width="640" height="480"></canvas>
<p>
<input type="button" name="Copy" value="Copy" id="copyBtn" />
<input type="button" name="Copy2Win" value="Copy To New Window" id="copy2WinBtn" />
</p>
<div id="dest01"></div>
</body>
</html>
쓰 기 전에'destWinDoc.open()'을 호출 해 보셨습니까? – jbabey
@jbabey 무슨 뜻인지 모르겠다. copy2Win 함수에서 내 dCtx.drawImage 전에 destWinDoc.open을 넣으려고했는데 사용 권한이 거부되었습니다 ... – dchin