Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
截取Javascript HTMLImageElement构造函数_Javascript_Html_Image_Dom_Intercept - Fatal编程技术网

截取Javascript HTMLImageElement构造函数

截取Javascript HTMLImageElement构造函数,javascript,html,image,dom,intercept,Javascript,Html,Image,Dom,Intercept,我尝试截取HTMLImageElement的Image()构造函数: 但我明白了 Uncaught TypeError: Illegal constructor(…) 如果我用HTMLImageElement替换Image,结果相同 我错过了什么?Image和HTMLImageElement的构造函数不是同一个函数。您不能跨浏览器覆盖后者 前言:重写图像将不会拦截HTML解析器或document.createElement调用创建img元素。据我所知,这是不可能跨浏览器的。您所能做的就是通过

我尝试截取HTMLImageElement的Image()构造函数:

但我明白了

Uncaught TypeError: Illegal constructor(…)
如果我用
HTMLImageElement
替换
Image
,结果相同


我错过了什么?

Image
HTMLImageElement
的构造函数不是同一个函数。您不能跨浏览器覆盖后者

前言:重写
图像
将不会拦截HTML解析器或
document.createElement
调用创建
img
元素。据我所知,这是不可能跨浏览器的。您所能做的就是通过一个链接捕获所有添加到文档中的图像。但这只是在添加时捕捉它们,而不是在创建时捕捉它们

但是:您已经说过它是
图像
,具体来说,您想覆盖它,所以在替换它之前取
图像
的原始值,并使用它

例如:

var originalImage=Image;
图像=功能(宽度、高度){
var结果;
控制台日志(“截获”);
开关(arguments.length){
案例0:
结果=新的原始图像();
打破
案例1:
结果=新的原始图像(宽度);
打破
违约:
结果=新的原始图像(宽度、高度);
打破
}
返回结果;
};
var img=新图像();
img.src=”https://i.stack.imgur.com/rQIK0.jpg?s=64&g=1";
文件.正文.附件(img);
img=新图像(32,20);
img.src=”https://i.stack.imgur.com/rQIK0.jpg?s=64&g=1";

文件.正文.附件(img)
Image
HTMLImageElement
的构造函数不是同一个函数。您不能跨浏览器覆盖后者

前言:重写
图像
将不会拦截HTML解析器或
document.createElement
调用创建
img
元素。据我所知,这是不可能跨浏览器的。您所能做的就是通过一个链接捕获所有添加到文档中的图像。但这只是在添加时捕捉它们,而不是在创建时捕捉它们

但是:您已经说过它是
图像
,具体来说,您想覆盖它,所以在替换它之前取
图像
的原始值,并使用它

例如:

var originalImage=Image;
图像=功能(宽度、高度){
var结果;
控制台日志(“截获”);
开关(arguments.length){
案例0:
结果=新的原始图像();
打破
案例1:
结果=新的原始图像(宽度);
打破
违约:
结果=新的原始图像(宽度、高度);
打破
}
返回结果;
};
var img=新图像();
img.src=”https://i.stack.imgur.com/rQIK0.jpg?s=64&g=1";
文件.正文.附件(img);
img=新图像(32,20);
img.src=”https://i.stack.imgur.com/rQIK0.jpg?s=64&g=1";

文件.正文.附件(img)你想截取的是
图像
?是的。它有什么特别的吗?
HTMLImageElement
是一个接口,而不是一个类……无论如何,如果您需要捕获所有正在创建的图像,这是不行的。如果您只需要调用所做的
Image
,我就不必麻烦修改原始构造函数,只需创建一个调用
新图像的不同函数
@rlib:您需要重写
.outerHTML
.innerHTML
.insertAdjacentHTML()
.cloneNode()
.createElement()
Image()
作为初学者。这仍然无法处理页面加载时创建的元素,因此您需要提前进行DOM选择才能获得这些元素。您要截取的是
Image
?是的。它有什么特别的吗?
HTMLImageElement
是一个接口,而不是一个类……无论如何,如果您需要捕获所有正在创建的图像,这是不行的。如果您只需要调用所做的
Image
,我就不必麻烦修改原始构造函数,只需创建一个调用
新图像的不同函数
@rlib:您需要重写
.outerHTML
.innerHTML
.insertAdjacentHTML()
.cloneNode()
.createElement()
Image()
作为初学者。这仍然无法处理页面加载时创建的元素,因此您需要提前进行DOM选择才能获得这些元素。
neworiginalimage(width,height)
是否工作不可靠?我想他们会认为<代码>未定义< /代码>是非数字。@斜视:这就是我的防御。我不知道实现不会查看实际收到的参数数量,所以。。。(谢天谢地,在ES2015中,它将是一个非常清晰的
Image=function(…args){console.log(“Intercepted”);return new originalImage(…args);};
)“…谢天谢地,ES2015的扩展符号…”对于这一点,以及其他许多开始使本机语法真正易于使用的补充。@T.J.Crowder:“重写图像不会被HTML解析器截获创建元素……据我所知,这是不可能跨浏览器的。”如果您还记得如何以某种特定/不可靠的方式执行此操作,请更新您的答案!
新的原始图像(宽度、高度)
是否工作不可靠?我想他们会认为<代码>未定义< /代码>是非数字。@斜视:这就是我的防御。我不知道实现不会查看实际收到的参数数量,所以。。。(谢天谢地ES2015的扩展符号,在ES2015中,它将是一个非常清晰的
Image=function(…args){console.log(“Intercepted”);返回新的原始图像(…args);};
)“…谢天谢地ES2015的扩展符号…”以及其他许多开始让本机语法变得令人愉快的补充
Uncaught TypeError: Illegal constructor(…)