SecurityException 1000,即使使用相同的域

时间:2011-04-14 13:11:05

标签: javascript firefox onload securityexception

我遇到了麻烦的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();
    var preparedImageData;

    sourceImage.onload = function() { 
        var canvas = document.createElement('canvas');
        canvas.width = 100; canvas.height = 100;
        var ctx = canvas.getContext("2d");        
        // resize image
        ctx.drawImage(sourceImage, 0, 0, sourceImage.width, sourceImage.height, 0, 0, canvas.width, canvas.height);    
        // save as imagedata
        try {
            try { 
                preparedImageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
            } 
            catch (e) { 
                netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
                preparedImageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
            }                          
        }
        catch (e) {
            throw new Error("unable to access image data: " + e)
        }
    }

第一个getImageData调用抛出,而enablePrivilege调用也会立即抛出。错误文本是“来自”http://127.0.0.1的脚本“被拒绝的UniversalBrowserRead权限。”我已经检查过,看起来这些消息只应在尝试访问来自另一个域的图像上的getImageData时出现,但事实并非如此(对吗?)。没有严格的安全策略(一切都默认),Firefox 4.0。相同的代码在Chrome上运行良好。

2 个答案:

答案 0 :(得分:1)

通过“同源”引用Same Origin Policy,协议,主机名和端口必须相同。我猜你在这里使用不同的端口?

我认为,由于脚本不是signed,您对netscape.security.PrivilegeManager.enablePrivilege的调用失败了 - 您是否尝试删除此代码?

答案 1 :(得分:0)

我设置context.getImageDataPrivilegeManager.enablePrivilegedocument.domain = document.domain调用失败,这是为了与托管在不同子域上的iframe合作完成的。作为一种解决方法,我将domain.tld / subdomain /代理到subdomain.domain.tld /并获得了所需的结果。