我想覆蓋內置方法CanvasRenderingContext2D.getImageData()。我想覆蓋實現,以便修改後的函數使用canvas上下文來修改畫布,然後調用原始函數,該函數應該返回不同的數據,如果該函數未被覆蓋。我這樣做的原因是爲了防止瀏覽器指紋。覆蓋CanvasRenderingContext2D.getImageData()
canvas.js
(function(){
'use strict';
var originalGetImageData = CanvasRenderingContext2D.prototype.getImageData;
// This function just adds 1 to each RGBA component in the array for testing.
// Will add random values for the real thing.
function randomiseImageData(image) {
var imageData = image.data;
var imageLength = imageData.length;
for (var i = 0; i < imageLength; i++) {
imageData[i] += 1;
}
var modifiedImage = new ImageData(image.width, image.height);
return modifiedImage;
}
CanvasRenderingContext2D.prototype.getImageData = function(sx, sy, sw, sh) {
console.log("[ALERT] " + window.location.hostname + " called CanvasRenderingContext2D.getImageData()");
const origin = window.location.hostname;
Math.seedrandom(origin);
var image = originalGetImageData.call(this, sx, sy, sw, sh);
return randomiseImageData(image);
};
})();
向畫布內容引入額外的熵級別將使瀏覽器更加獨特,從而更容易識別和跟蹤。 – Blindman67