代理对象无法添加到 DOM(陷阱也不会触发)

2023-11-23

我正在尝试做一个Proxy object of Image捕获属性,但即使使用空处理程序,我也会收到错误消息。

TypeError:Node.appendChild 的参数 1 未实现 Node 接口。

代理对象应该充当目标对象,所以这让我有点困惑。据我了解你应该能够做到这一点DOM 节点以及(?)。

Also:我无法开始加载图像并有onload设置时触发处理程序src财产。

我应该如何使用代理,以便我可以“接管”例如“src”属性,否则让它像常规图像对象一样工作?

My code

'use strict';

//--- normal image use ---
var imgNormal = new Image();
imgNormal.onload = function(){
  console.log('Normal loaded OK');
  document.body.appendChild(imgNormal);
};
imgNormal.src = 'https://i.imgur.com/zn7O7QWb.jpg';

//--- proxy image ---
var imgProxy = new Proxy(Image, { // I also tried with 'new Image()' and HTMLImageElement
  set: function(a,b,c,d){
    console.log('set '+b);
    return Reflect.set(a,b,c,d);
  }
});
imgProxy.onload = function(){
  console.log('Proxy loaded OK');
  document.body.appendChild(imgProxy);
};
imgProxy.src = 'https://i.imgur.com/zn7O7QWb.jpg';

document.body.appendChild(imgProxy); // double-up to demo error

Update: Thanks to @Harangue! using "new" (bah..) certainly made the proxy object come to life but now I am unable to trap the setting of properties. It seem to ignore the trap completely - example:

var proxy = new Proxy(Image, {
      set: function(a,b,c,d){
        console.log('set '+b);        // doesn't show
        return Reflect.set(a,b,c,d);
      }
    });

    var imgProxy = new proxy();
    imgProxy.onload = function(){
      console.log('Proxy loaded OK');
      document.body.appendChild(imgProxy);
    };
    imgProxy.src = 'https://i.imgur.com/zn7O7QWb.jpg';

如何使用有效代理捕获属性设置?

Update 2另一方面 - 使用newnew代理似乎只使用original构造函数。我能找到的所有例子都是如此not使用新的:

var myProxy = new Proxy(.., ..);  // should suffer

在此基础上使用 thennew myProxy()似乎只使用原始构造函数,这不是我想要的,因为它忽略了陷阱。

var proxy = new Proxy(Image, {}); //should be sufficent??
var proxy2 = new proxy();
console.log(proxy2); //-> says Image (not proxy..)

在我的第一次尝试中,陷阱似乎有效,但代理的行为不符合预期。这太令人困惑了,也太新鲜了。很高兴了解如何解决这两个问题(陷阱和行为)。


永远不要低估它的重要性new关键词。 ;)

//--- proxy image ---
var imgProxy = new Proxy(Image, {  // I also tried with 'new Image()'
  set: function(a,b,c,d){
    console.log('set '+b);
    return Reflect.set(a,b,c,d);
  }
});
imgProxy.src = 'https://i.imgur.com/zn7O7QWb.jpg';

document.body.appendChild(new imgProxy); // double-up to demo error

使用代理,您可以有效地扩展 Image 对象。但是发送 Image 构造函数本身,而不是它返回的 DOM Node,确实会丢失所需的appendChild.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代理对象无法添加到 DOM(陷阱也不会触发) 的相关文章

  • dojo dijit.form.DateTextBox 约束不起作用,datetextbox

    嗨 我是 javascript 和 dojo 的新手 我正在尝试使用两个带有下拉日历的 dijit DateTextBox 来建立数据库查询的日期范围 一旦选择了开始日期或结束日期 我想限制可用的日期 以便不可能选择按时间顺序排列在开始日期
  • 如何检测浏览器是否支持自定义元素

    我正在查看 Modernizr 它应该有助于功能检测 这应该可以帮助确定您的网站是否与给定的 Web 浏览器兼容 但我没有看到任何表明我可以使用它来检测自定义 HTML 的内容我们在内容中创建和定义的元素 如果不是 Modernizr 我如
  • 不和谐机器人 |不和谐.js |类型错误:无法读取未定义的属性“长度”

    我正在制作一个 Discord 机器人 并且正在使用 CodeLyon 的视频作为参考 该错误位于我的 message js 文件中 该文件包含以下内容 require dotenv config create cooldowns map
  • 为什么 JavaScript base-36 转换看起来不明确

    我目前正在编写一段使用 Base 36 编码的 JavaScript 我遇到了这个问题 parseInt welcomeback 36 toString 36 看来要回归了 welcomebacg 我在 Chrome 开发者控制台和 Nod
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • 使用 Angular 下载具有动态 src 的脚本

    Angular 提供了通过动态名称动态加载模板的方法ng include 该部分中的内联 JS 和 CSS 可以正常加载 但没有一个好的方法来下载带有动态 url 的脚本 我们需要下载脚本 相对于调用它们的 html 部分的路径 即我们有一
  • 除了更改标题之外,如何在 Firefox 中强制另存为对话框?

    有没有办法在 ff 中强制打开 www example com example pdf 的另存为对话框 我无法更改标题 如果您可以将文件以 Base64 格式输出到客户端 则可以使用 data uri 进行下载 location href
  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • Jquery/Javascript 上传和下载文件,无需后端

    是否可以在没有后端服务器的情况下在 JavaScript 函数中下载和上传文件 我需要导出和导入由 JavaScript 函数生成的 XML 我想创建按钮 保存 xml 来保存文件 但我不知道是否可行 另一方面 我希望将 XML 文件直接上
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Electron - 为什么在关闭事件时将 BrowserWindow 实例设置为 null

    The 电子文档 https electronjs org docs api browser window 提供以下代码示例来创建新窗口 const BrowserWindow require electron let win new Br
  • 如何在类似控制台的环境中运行 JavaScript?

    我正在尝试遵循这里的示例 http eloquentjavascript net chapter2 html http eloquentjavascript net chapter2 html and print blah 在浏览器中运行时
  • 如何获取给定 DOM 元素的所有定义的 CSS 选择器?

    如何使用 jQuery 获取给定 DOM 元素的所有定义的 CSS 选择器 定义后 我的意思是在应用于任何样式表的所有 CSS 选择器document 在某种程度上 这类似于 FireBug 实现的功能 其中显示所选 DOM 元素的所有应用
  • 为什么我不能在 AngularJS 中使用 data-* 作为指令的属性名称?

    On the t他的笨蛋 http plnkr co edit l3KoY3 p preview您可以注意到属性名称模式的奇怪行为data 在指令中 电话 Test of data named attribute br
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中

随机推荐

  • scala 中的泛型不变协变逆变

    这可能是一个非常愚蠢的问题 但即使在挠了很长时间之后我也无法理解其中的区别 我正在浏览 scala 泛型页面 https docs scala lang org tour generic classes html 这里据说 注意 泛型类型的
  • 如何使用类型特征进行条件编译?

    我正在尝试编写类似的代码here但使用 C 11 功能 不使用 Boost 工作自这个例子 我试图定义一个response trait 以及基于特征结果的条件编译 我怎样才能做到这一点 include
  • 从 XML 文档中获取指定的 Node 值

    我在浏览 XML 文档 使用 C 并获取所有必要的值时遇到问题 我成功地遍历了 XML 文档中所有指定的 XmlNodeList 成功获取了其中的所有 XmlNode 值 但我必须获取此 XmlNodeList 之外的一些值 例如
  • Webpack 和 angularJs

    我正在尝试使用 angularjs 和 webpack 运行简单的应用程序 这是我的代码 索引 html Full Name firstName lastName app js var app angular module myApp
  • 如何在 OAML 中读取位图?

    我想使用 OCAML 读取位图文件 从文件系统 并将像素 颜色 存储在具有位图维度的数组中 每个像素将占用数组中的一个单元格 我找到了这个功能Graphics dump image 图像 gt 颜色数组 数组但它不从文件中读取 影像影像应该
  • Python 正则表达式 \w 与组合变音符号不匹配?

    我有一个带有组合变音符号的 UTF8 字符串 我想将它与 w正则表达式序列 它匹配带有重音符号的字符 但如果存在带有组合变音符号的拉丁字符则不匹配 gt gt gt re match a w w wz u aoooz re UNICODE
  • jsonschema2pojo 不从 json 字符串生成 pojo 类

    我正在关注链接从 JSON 生成 Java 类 从 json 字符串 而不是从模式 创建 POJO 类 我正在使用 0 4 10 版本的 jsonschema2pojo jar 但无法生成 POJO 类 我的代码如下 public clas
  • 通过 RESTeasy 上的名称绑定将过滤器与特定方法匹配

    我正在尝试指定一个仅与我的某些 API 调用关联的预匹配过滤器 方法如下 RESTeasy 文档建议 我的代码如下所示 姓名绑定 NameBinding public interface ValidateFoo 资源 Path foo ba
  • NGINX 反向代理和访问控制允许来源问题

    我正在配置一个NGINX Reverse Proxy 在浏览器上我转到 客户端网址 https www hollywood com 那么上面的网页需要执行以下请求 服务器网址 https server hollywood com api a
  • sudoers NOPASSWD: sudo: 不存在 tty 且未指定 Askpass 程序

    我添加了一个这样的用户 adduser system home no home no create home group disabled password disabled login testuser 将用户添加到组中 adduser
  • scrapy中提取类名

    我正在尝试取消 trustpilot com 的评级 是否可以使用scrapy提取类名 我正在尝试抓取由五个单独图像组成的评级 但这些图像位于具有评级名称的类中 例如 如果评级为 2 则开始 div class star rating co
  • php:会话与数据库

    我有一个类从数据库中检索其成员 或多或少 10 个成员 我的问题是 每次从数据库 MySQL 获取它们 只在会话数组中留下一个ID 还是直接将它们存储在会话数组中 是否更有效 而且性能方面的差异这么大吗 假设数据库有 100 000 行 考
  • 将 R 诊断消息发送到 stdout 而不是 stderr

    寻找一个选项可以让我重定向 R 诊断消息 由message to stdout not stderr因为它是默认的 message手册指出 默认处理程序将消息发送到 stderr 连接 那么问题是如何改变这种默认行为 仍然保留重定向warn
  • 从 json 文件中读取多个元素

    我有一个 json 文件 其中包含许多如下元素 code hfuiew89 type location coordinates lat 40 9861 lon 29 1046 index 1 lat 40 9976 lon 29 1153
  • GO111MODULE=on(加载模块要求时出错)

    go get u github com junegunn fzf工作正常 但想像这样测试开发分支 gert gert GO111MODULE on go get u github com junegunn fzf devel go find
  • 具有多个数据源的工作单元?

    有可能 甚至很可能 我只是没有完全理解 工作单元 的概念 基本上 我将其视为面向对象环境中使用的广泛事务 启动工作单元 与对象交互 提交或回滚 但这如何分解为这些对象背后的数据存储上的实际事务呢 在具有单个 DB 和 ORM 例如 NHib
  • 在启动 Shiny 应用程序时更改 RStudio 窗口的大小

    我正在使用 RStudio IDE 来开发闪亮的应用程序 启动应用程序时 我通常使用 RunApp 按钮 在窗口中运行 这将在具有特定宽度和高度的窗口中打开应用程序 有没有办法更改此窗口的宽度 以便每次启动应用程序时都会显示在更宽的窗口中
  • C 中运行时的变量名、函数参数

    C 程序运行时是否可以知道函数参数和变量的名称类型 例如 如果我有一个函数 int abc int x float y somestruct z char a int b 我可以知道这个函数的内部吗abc 参数和变量的名称是什么i e 在这
  • Android+Gradle:将目录列出到文件中

    我正在尝试将 ANT 构建中的任务转换为 Gradle
  • 代理对象无法添加到 DOM(陷阱也不会触发)

    我正在尝试做一个Proxy object of Image捕获属性 但即使使用空处理程序 我也会收到错误消息 TypeError Node appendChild 的参数 1 未实现 Node 接口 代理对象应该充当目标对象 所以这让我有点