2012-01-24 25 views
5

Tôi đang phải đối mặt với một vấn đề với CSP trong phần mở rộng của tôi ...CSP vấn đề với createObjectURL trên WebkitBlobBuilder

tôi sử dụng một kịch bản nội dung để thay đổi hình ảnh trên các trang web. kịch bản nội dung của tôi đã được bổ sung thêm hình ảnh của riêng mình đến các trang web vì vậy tôi đã cảnh báo sau đây:

[Report Only] Refused to load image from 'chrome://extension/xxx/...' 
because of Content-Security-Policy. 
The page at https://plus.google.com/u/0/hot displayed insecure content 
from chrome://extension/xxx/.... 

Vì vậy, tôi đã thêm dòng sau vào manifest của tôi:

"content_security_policy": "default-src *" 

và cảnh báo biến mất ...

Bây giờ, tôi cần phải sửa đổi hình ảnh, để làm điều đó, tôi viết chúng vào canvas, lấy dataURL và chuyển đổi nó thành một WebkitBlobBuilder để tránh rò rỉ bộ nhớ do src thay đổi trên thẻ img (với một đốm màu, tôi có thể thu hồi nó một khi nó đã được sử dụng và nó giải phóng bộ nhớ ...)

Một phần của mã:

//Code to create a blob from dataURI 
    base.dataURItoBlob = function(dataURI, callback) { 
     var byteString; 
     if (dataURI.split(',')[0].indexOf('base64') >= 0) 
      byteString = atob(dataURI.split(',')[1]); 
     else 
      byteString = unescape(dataURI.split(',')[1]); 
     var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; 
     var ab = new ArrayBuffer(byteString.length); 
     var ia = new Uint8Array(ab); 
     for (var i = 0; i < byteString.length; i++) { 
      ia[i] = byteString.charCodeAt(i); 
     } 
     var bb = new WebKitBlobBuilder(); 
     bb.append(ab); 
     return bb.getBlob(mimeString); 
    }; 

    //Code to display the blob on an image : 
    //Write image on a canvas : 
    base.ctx.putImageData(cData, img.leftPos, img.topPos); 
    //Get a blob 
    var blobData = base.dataURItoBlob(base.canvas.toDataURL("image/png")); 
    //Create an URL from the blob 
    var urlfile = window.webkitURL.createObjectURL(dataBlob); 
    //set it on the img tag 
    img.attr("src", urlfile); 
    //Revoke the blob once loaded 
    img.load(function() { 
    window.webkitURL.revokeObjectURL(urlfile); 
    }); 

Mã này hoạt động tuyệt vời .... Không có bộ nhớ bị rò rỉ hơn do thay đổi src vào thẻ img tôi.

NHƯNG tôi có cảnh báo này:

[Report Only] Refused to load image from 'blob:https%3A%2F 
%2Fplus.google.com/52ac1648-64d6-4fce-bb35-537d939d5007' because of 
Content-Security-Policy. 
The page at https://plus.google.com/u/0/hot displayed insecure content 
from blob:https%3A%2F%2Fplus.google.com/52ac1648-64d6-4fce- 
bb35-537d939d5007. 

Tại sao mặc định-SRC từ chính sách nội dung không áp dụng cho blobs ??

Cảm ơn!

+2

Âm thanh như thế này có thể là một lỗi trong việc triển khai CSP, cho đến khi tôi có thể nói, blobs nên được công nhận như là một chương trình hợp lệ: bạn có thể gửi một lỗi tại http://new.crbug.com/? –

Trả lời

Các vấn đề liên quan