我正面临一个麻烦的 Javascript/Firefox 问题。相关代码如下。
基本上发生的情况如下:
1. document.ready 触发并启动 AJAX 请求(到 document.domain:8484/getTrack.php 或其他)
2. 收到 AJAX 响应。此响应包含图像位置的 url(相同域)。因此,设置了 sourceImage.onload,然后设置了 sourceImage.src
3. sourceImage.onload 触发。现在的想法是将调整大小的图像保留在内存中,以完全适合将要绘制的画布。我想将这个调整大小的图像保存在内存中,因为我要多次将它(部分)写入我的画布,并且每次调整大小应该会慢很多。
var SourceImage = new Image(); varpreparedImageData; sourceImage.onload = function() { var canvas = document.createElement('canvas'); 画布.宽度 = 100; 画布.高度 = 100; var ctx = canvas.getContext("2d"); // 调整图像大小 ctx.drawImage(sourceImage, 0, 0, sourceImage.width, sourceImage.height, 0, 0, canvas.width, canvas.height); // 保存为图像数据 尝试 { 尝试 { PreparedImageData = ctx.getImageData(0, 0, canvas.width, canvas.height); } 抓住(e){ netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); PreparedImageData = ctx.getImageData(0, 0, canvas.width, canvas.height); } } 抓住(e){ throw new Error("无法访问图像数据:" + e) } }
第一个 getImageData 调用抛出,并且 enablePrivilege 调用也立即抛出。错误文本是“来自“http://127.0.0.1”的脚本被拒绝 UniversalBrowserRead 权限。”。我已经检查过,这些消息似乎只应在尝试从另一个域访问图像上的 getImageData 时出现,但事实并非如此(对吗?)。没有严格的安全策略(一切默认),Firefox 4.0。相同的代码在 Chrome 上运行良好。