답변
Image
및 HTMLImageElement
의 생성자는 동일한 기능이 아닙니다. 후자의 신뢰할 수있는 크로스 브라우저를 재정의 할 수 없습니다.
서문 :Image
는 HTML 파서에 의해 img
요소 또는 document.createElement
전화의 생성을 차단하지 않습니다 재정의. 내가 아는 한, 그건 불가능한 크로스 브라우저입니다. 당신은 수 있습니다 do는 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);
는 :
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);
'new originalImage (width, height)'가 안정적으로 작동하지 않습니까? 나는 그들이'undefined '를 숫자가 아닌 것으로 생각할 것이라고 생각할 것이다. –
@ 스쿼트 : 그게 내가 방어 적이라는거야. :-) 구현 도구가 실제로받은 인수의 수를 조사하지 않는다는 것을 * 알지는 못합니다. (ES2015의 확산 표기법에 대한 하늘에 감사드립니다. ES2015에서 그것은 훌륭한 명확한 이미지입니다. –
* "ES2015의 스프레드 표기법에 대해 천국에 감사드립니다."* 기능 (... args) {console.log ("가로 채기"), 새 originalImage (... args);}; 그 외에도 네이티브 구문을 실제로 사용하기가 즐겁게 만들어주는 많은 추가 기능들이 있습니다. –
그것은'특별히입니다 당신이 원하는 Image' 요격하다 ? –
예. 여하튼 특별하니? – rlib
'HTMLImageElement'는 인터페이스가 아닌 클래스입니다. –