Image
和HTMLImageElement
的構造函數功能不一樣。您無法跨越可靠的跨瀏覽器的後者。
前言:重寫Image
不會攔截由HTML解析器img
元素或document.createElement
調用的創建。據我所知,這是不可能的跨瀏覽器。你可以做的是捕獲所有圖像,因爲它們通過mutation observer添加到文檔中。但是這只是在被添加而不是創建的時候捕捉到它們。
但是:你說這是Image
,具體而言,要覆蓋,因此替換它之前採取的Image
原始值,並使用它。
例子:
var originalImage = Image;
Image = function(width, height) {
var result;
console.log("Intercepted");
switch (arguments.length) {
case 0:
result = new originalImage();
break;
case 1:
result = new originalImage(width);
break;
default:
result = new originalImage(width, height);
break;
}
return result;
};
var img = new Image();
img.src = "https://i.stack.imgur.com/rQIK0.jpg?s=64&g=1";
document.body.appendChild(img);
img = new Image(32, 20);
img.src = "https://i.stack.imgur.com/rQIK0.jpg?s=64&g=1";
document.body.appendChild(img);
在ES2015,如果這是一個選擇:
const originalImage = Image;
Image = function(...args) {
console.log("Intercepted");
return new originalImage(...args);
};
let img = new Image();
img.src = "https://i.stack.imgur.com/rQIK0.jpg?s=64&g=1";
document.body.appendChild(img);
img = new Image(32, 20);
img.src = "https://i.stack.imgur.com/rQIK0.jpg?s=64&g=1";
document.body.appendChild(img);
這是專門'Image'要截距? –
是的。它是否特別? – rlib
'HTMLImageElement'是一個接口,而不是一個類。 –