我不知道是否有解決此IE9問題的辦法,我遇到了,但這是我想要做的。我的頁面上有一張畫布。我想將此畫布圖像複製到另一個畫布,但是在我創建的彈出式窗口中。我在這個實驗中遇到的是我可以將畫布圖像複製到另一個動態創建的畫布上,沒有問題。但是,當我嘗試在彈出窗口中執行此操作時,IE給我一個DOM異常:TYPE_MISMATCH_ERR(17)。不幸的是,這似乎是一個IE瀏覽器的事情,因爲我在Chrome中運行相同的代碼,並且它工作... 所以這裏是我的代碼。您需要提供自己的圖像,但我使用了一個簡單的640x480 jpeg文件。你還需要打開控制檯,因爲我在做一個console.error。我也試過這段代碼作爲一個文件,並從本地IIS上的本地主機運行。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不確定你的意思。我嘗試在我的dCtx.drawImage在copy2Win函數之前放置一個destWinDoc.open,並且我得到了拒絕的權限... – dchin