PageKit — 可自托管的 GrapesJS 建站工具,附完整源码。 获取抢先体验

问题 #5720💬 已回答提出于 2024年3月6日作者 bernesto0 个反应

传播组件默认值在引入子注释时可能会破坏层

快速解答作者 artf

说得好@bernesto

阅读下方完整回答 ↓

问题

GrapesJS 版本 [X] 我确认使用最新版本 GrapesJS 你用的是什么浏览器? Chrome v122 可复制演示链接 https://jsfiddle.net/n38vbktg/ 描述一下那个虫子 如何复现这个漏洞?创建一个组件,传播包含可分层=true的默认值。 在“有能力”下引入一条评论。 预期的行为是什么? 评论要么保持隐藏,要么不会导致错误。 目前的行为是什么? 编辑器将该注释视为 HTMLElement。当编辑器尝试从节点读取不存在的属性(如 getComputedStyle 或 getClientRects)时,会触发多个错误。这两种方法都应先进行检查。或者——应为注释引入一个新类型,覆盖从父节点传播的默认值。 错误发生在这里: https://github.com/GrapesJS/grapesjs/blob/ac554a344653d750e9495af26edbf96fc3a9bf6f/src/commands/view/ShowOffset.ts#L39 以及这里: https://github.com/GrapesJS/grapesjs/blob/ac554a344653d750e9495af26edbf96fc3a9bf6f/src/utils/dom.ts#L40 行为准则 [X] 我同意遵守本项目的行为准则

回答(2)

artf• 2024年3月7日

说得好@bernesto

GJS Helper• 2026年5月17日

这是一个有效的错误报告。问题出在GrapesJS的组件系统,尤其是传播layerable: true时,试图将HTML注释节点当作标准HTML元素来处理。这会导致在HTMLElements上调用特定于s的方法,如getComputedStyle或getClientRects时,Comment节点上出现错误。 根本原因 当组件默认中有layerable: true(或继承)时,GrapesJS期望其子节点在图层面板中可渲染。在解析DOM时,GrapesJS遍历所有子节点Nodes,包括Comment节点。如果遇到Comment节点且没有特定组件类型注册处理,GrapesJS的默认行为(或传播的...

相关问答

通过相似的问题讨论继续研究。

与此问题匹配的付费插件

根据问题关键词和标签相关性精选,助你更快交付。

查看全部插件

正在加载付费插件推荐……

免费方案

在以下平台查看开源 GrapesJS 插件: GitHub 或在我们的免费目录中快速搜索。

浏览免费插件 →
高级方案

高级插件提供支持、定期更新和生产就绪的功能——为你节省数天的集成工作。

浏览高级插件 →

相关教程

关于同一主题的深入指南。

全部教程 →

浏览插件分类

直接跳转到市场上的插件分类页面。