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

GrapesJS 问题

已收录 3,464 个 GitHub 问题 — 370 个已解决 · 90 个待解决 搜索、筛选并探索经过实战检验的答案。

找到 220 个问题

🔍 canvas
#66682025年12月4日作者 msftedad2 个回答
0 个反应

Windows中的iframe没有定义可访问名称。

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Edge(版本 143.0.3650.46)、Chrome(版本 143.0.7499.41) 可复制演示链接 https://grapesjs.com/demo 描述一下那个虫子 测试环境: 操作系统:Windows 11 版本 25H2(系统构建 26220.7271) 浏览器:Edge(版本143.0.3650.46)、Chrome(版本143.0.7499.41) 屏幕阅读器:NVDA(2025.3.1),JAWS(2025.2508.120) 网址:https://grapesjs.com/demo 用户影响: 屏幕阅读器用户无法识...

msftedad

大家好, 这个问题有最新进展吗?

GJS Helper

这是一个合理的无障碍问题。GrapesJS编辑器的画布被渲染在一个<iframe>元素中。为了让屏幕阅读器正确识别并宣布该iframe的目的,它需要一个可访问的名称,通常由title属性或aria-label提供。 根本原因: 默认情况下,GrapesJS不会自动为主编辑器 iframe 分配 title 或 aria-label 属性。虽然 iframe 的内容(可编辑页面)可能有自己的标题,但 iframe 容器本身需要一个描述性名称,以便辅助技术告知用户其在页面中的角...

#66662025年11月28日作者 lexoyo2 个回答
2 个反应

图层面板:拖放让物品消失(Firefox和Chrome)

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Firefox 137.0 和 Chrome 136.0.7103.92 可复制演示链接 https://grapesjs.com/demo.html 描述一下那个虫子 如何复现这个漏洞? 打开官方演示版 [https://grapesjs.com/demo.html](https://grapesjs.com/demo.html) 要重现完全相同的结构,将此 JSON 粘贴到 localStorage > 'gjsProject': '''json {“assets”:[],“styles”:[{“selectors”:[“#ixix”],...

pierodetomi

我可以确认我遇到了同样的问题,原因是消失元素的计算高度是“0px”(因为它使用了display: none)。 虽然这确实是个bug,但作为临时变通,你可以在编辑器中避免在该节点使用“display: none”,而是使用一种“等效”的隐藏风格,保持元素在布局中但不可见,例如“visibility: hidden;指针事件:无;高度:1px'(1px高度是排序操作后实际保持元素在编辑器中的高度)。 这显然只是在根本问题解决前的权宜之计。

GJS Helper

这确实是GrapesJS图层面板拖放功能中的一个bug,特别是在尝试移动语义关联的组件时,比如带有id的input元素和带有for属性的label元素引用该id。该问题在官方GrapesJS演示中是可复现的。 观察到的行为 将“复选框”组件(带有id="check"的input)拖到“Logo”组件下方时: “复选框”组件未能移动,在图层面板和画布上都保持在原位。 “按钮”组件(带有for="check"的label)意外地完全从画布和图层面板中消失,表明它正在Grapes...

#66632025年11月26日作者 lexoyo4 个回答
0 个反应

符号在逐步加载页面时会断裂(实例丢失__symbol链接)

这里有一段展示这个bug的视频: https://github.com/user-attachments/assets/0fdc76ed-cee5-4481-98b1-cbbf52572b31 GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Firefox 最新版和 Chrome v141.0.7390.122 可复制演示链接 https://canary.silex.me/ 如果需要,我可以用小提琴或代码笔,或者你也可以用 https://canary.silex.me 复刻(你需要 gitlab.com 账号),不需要设置,bug会立即复制 甚至更简单,不用 gitlab.com 账号...

lexoyo

哦,如果你告诉我应该重点解决什么方案(比如重新连接实例的命令、像我在 silex 里做的那样用异步方法加载项目数据,我很乐意贡献......) CC @artf

artf

是的,看起来是这种加载🤔页面方式的问题 我这边(满载项目)没看到什么问题。为什么要用这种方式加载页面?

lexoyo

是的,看起来这种加载🤔方式确实有问题,我这边(满载项目)没看到问题。为什么要用这种方式加载页面? 这样可以避免主线程被阻塞太久。当用户加载真实网站时,通常会显示脚本冻结浏览器的警告。还是说有我不知道的机制可以加载这些网站?

#66232025年10月10日作者 zhengtulymGh1 个回答
0 个反应

自定义动态列表在绑定数组并展开行以匹配长度后会冻结

GrapesJS版本 [x] 我确认使用最新版本GrapesJS 你用的是什么浏览器? 140.0.7339.214(正式版本) (x8664) 可复制演示链接 https://codesandbox.io/p/devbox/d27l6n 描述一下那个虫子 我想基于GrapesJS创建一个自定义的动态列表组件(默认为3行)。它可以绑定到数组变量,并根据数组长度动态改变容器中的行数。现在我遇到了冻结问题。重现步骤如下: 点击左侧的变量标签,创建一个长度为4的新数组变量。 [![请输入图片描述][1]][1] 回到组件标签,将动态列表容器组件拖到画布上。 选择你刚拖入的动态列表组件。右侧的样式标签页会显示一个下拉菜单,用于绑定数组变量...

GJS Helper

你在GrapesJS中遇到的自定义动态列表组件冻结的问题,是典型的事件反馈循环。这是因为负责更新行计数的事件监听器过于宽泛,导致它在无限循环中重新触发。 根本原因 你的editor.on('component:update:attributes', ...)监听器设计成在组件的任何属性被更新时做出反应。当你将数组变量绑定到动态列表组件时,其DLATTRARRAYVAR属性会发生变化,正确触发监听器并随后ensureRowCountByArray。 ensureRowCoun...

#65892025年8月16日作者 mohammedmoulla1 个回答
0 个反应

更改根节点后,无法在 layerManager 中拖放元素

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Google Chrome v139.0.7258.128 可复制演示链接 https://codesandbox.io/p/sandbox/relaxed-payne-vt3pgc 描述一下那个虫子 如何复现这个漏洞? 在画布上添加一些元素 尝试在图层管理器中查找元素并拖动或移动它们 预期的行为是什么? 在0.20.2版本中运行得很完美 目前的行为是什么? 不能更改图层管理器树的根节点 ==> 只能更改主体 我尝试了所有方法,但都没用 如果需要执行某些代码以重现该漏洞,请将其粘贴到下面: 不,直接打开链接 行为准则 [x] 我同意遵守本项目...

GJS Helper

感谢你报告这个问题并提供了一个清晰可复现的演示。你在尝试更改根目录后遇到的拖放问题,是由于错误地使用了layerManager.root配置选项。 根本原因 GrapesJS初始化配置中的layerManager.root选项期望的是 GrapesJS组件实例,而不是 CSS 选择字符串。当你提供像 "#root"这样的字符串时,GrapesJS要么忽略它,要么无法正确解析到图层管理器拖拽机制可以绑定的组件实例。因此,图层管理器默认使用主包装组件(实际上是画布的 body)...

#65832025年8月5日作者 msftedad2 个回答
1 个反应

Windows中的“grapesjs”标志没有定义替代值。

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Edge 版本 135.0.2535.51(官方构建)(64 位),Chrome 版本 135.0.6422.112(官方构建)(64 位) 可复制演示链接 https://grapesjs.com/demo 描述一下那个虫子 测试环境: 操作系统:Windows 11[版本24H2(操作系统构建版24631.3593)] Edge:版本 135.0.2535.51(官方版本)(64 位) Chrome:版本 135.0.6422.112(官方构建)(64位) 屏幕阅读器:NVDA(2024.4.2) 测试网址:https://grapesj...

artf

嘿,@msftedad网站仓库在[这里](https://github.com/GrapesJS/website),欢迎提交修复后的永久注册([file](https://github.com/GrapesJS/website/blob/main/src/app/(demos)/GrapesEditor.tsx))。我决定关闭这个问题,因为它和核心无关。

GJS Helper

这是一份有效且重要的无障碍漏洞报告,适用于GrapesJS演示页面。问题源于GrapesJS标志的<img>标签中alt属性为空,错误地向屏幕阅读器传达该图像纯属装饰性。对于同时作为首页链接的标志来说,这是一个有意义的元素,需要描述性替代文本。 根本原因 虽然alt属性存在于演示页面GrapesJS标志的HTML中,但它被设置为空字符串(alt="")。根据网页内容无障碍指南(WCAG),空alt属性应仅用于纯装饰性且不传递信息的图片。在这种情况下,GrapesJS标志是一...

#65622025年7月9日作者 jsxOverdose3 个回答
1 个反应

移动元素在调整尺寸时会吸附到错误的位置

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Chrome 138.0.7204.101 可复制演示链接 https://jsfiddle.net/u3L89ejh/1/ 描述一下那个虫子 如何复现这个漏洞? 调整图像大小 把它拖到画布上的别处 点击其中一个小蓝色缩小方块 观看图像跳跃到不同位置 预期的行为是什么? 应该留在我放的地方 如果顶部/左/右/底部的值没有单位,则将值当作“px”来处理,而不是“%”。 目前的行为是什么? 当你移动图像时,上下两侧的像素值表现良好。 但你一碰到缩放按钮,它就会切换到“%”,然后突然跳到画布上全新的位置。 行为准则 [x] 我同意遵守本项目的行为准则

artf

@jsxOverdose推送了这次新版本的修复:https://github.com/GrapesJS/grapesjs/releases/tag/v0.22.11

jsxOverdose

@artf 在新版本中,还有另一个bug:当你点击Y轴上的缩放手柄时,图片会明显变大。这是试玩版:https://jsfiddle.net/du81zL6r/

GJS Helper

你遇到的元素在移动后跳到错误位置并与调整器交互的问题,是GrapesJS处理CSS top和left属性时的已知行为,尤其是在应用position: absolute且单位未明确定义时。 根本原因 当画布上移动带有position: absolute的元素时,GrapesJS正确地使用px单位应用top和left样式。然而,top和left属性的默认StyleManager配置(在Position类别下)定义了可能units的列表(例如['px', '%', 'em', '...

#65492025年6月25日作者 yashvi20264 个回答
1 个反应

Couldnt Resize image

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? 铬 可复制演示链接 https://codepen.io/Harshsne/pen/YPXdgmj 描述一下那个虫子 如何复现这个漏洞? 上传图片 将其切换为移动视图 调整图像大小 ![图片](https://github.com/user-attachments/assets/99f43e87-39bd-488c-8d64-e13ed698d49f) 预期的行为是什么? 在样式管理器中手动更改宽度和高度时,图片会被调整大小。 目前的行为是什么? 无法调整图片大小 原因是在Canvas中调整图像大小时不会添加重要,所以原始样式不会被覆盖。 行...

mosh-tudor

@yashvi2026 那是因为你用了自定义的CSS代码。 去除这一部分: “''js 样式:'.image{最大宽度:100%;@media(最大宽度:480px) {.image {display: inline-block;高度:自动 !重要;宽度:100% !重要;最大宽度:100%;}}, `` 来自“编辑部”。BlockManager.add('image', {'

artf

我确认组件调整现在没考虑“重要”,但我大致会按照@mosh-tudor的建议来做。 你不需要去掉所有“样式”,我猜你需要的就是这个,但我觉得没必要把“!important”放在上面。如果你需要“!important”,问题很可能出在图像组件之外。

yashvi2026

我需要在风格中使用'!important'。 我注意到在其他组件中,当默认样式中包含“!important”时,通过样式管理器添加的样式也会包含“!important”,以确保它们覆盖默认样式。 ![图片](https://github.com/user-attachments/assets/0ce9b9ce-86da-41d5-9795-50221d792bce) 所以,当在样式管理器中手动更改样式时,会添加 !important。 同样地,调整组件大小时,样式也应该加上...

#65022025年4月25日作者 jsxOverdose2 个回答
0 个反应

内联样式覆盖基于ID的CSS规则

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Chrome v135.0.7049.96 可复制演示链接 https://jsfiddle.net/bqkLwt8j/ 描述一下那个虫子 当元素具有内联样式且匹配基于ID的CSS规则时,ID选择器的样式会被移除——即使内联样式不会覆盖这些属性。然而,基于类的 CSS 规则不会出现这个问题,因为它们的行为符合预期。 如何复现这个漏洞? 为特定ID添加CSS规则,例如“#frame2 { color: red; }` 添加带有该ID和内联样式的元素,例如'<div id=“frame” style=“font-size: 14px;”>'” 注...

artf

谢谢你的报告@jsxOverdose 下次版本会修复

GJS Helper

你准确识别了GrapesJS中内联样式似乎完全覆盖基于ID的CSS规则,即使是对无冲突属性的属性。这确实偏离了标准CSS专一性规则,可以看作GrapesJS内部样式管理处理内联样式与ID选择器交互时的一个bug。 根本原因分析 在标准CSS中,特异性要求内联样式(style="...")具有最高的特异性,其次是ID选择器(#id),然后是类选择器(.class),最后是元素选择器(tag)。当一个元素适用多条规则时,具有较高特异性的规则优先用于冲突属性,而低特异性规则中的非...

#64222025年2月27日作者 sumasal2 个回答
0 个反应

在开发分支中,当预览启用时,不应该允许拖动组件,但实际上是允许的。

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? 截至2025年2月27日,Chrome 133 带开发分支 可复制演示链接 克隆开发仓库截至2025年2月27日 描述一下那个虫子 如何复现这个漏洞? ...克隆仓库,构建并开始 ...在演示页面点击进入预览模式,尝试拖动组件。它是全编辑模式,画布会以半编辑模式运行,直到用预览按钮回收 预期的行为是什么? ...编辑模式下不应禁用拖曳或任何编辑功能 目前的行为是什么? ... 如果需要执行某些代码以重现该漏洞,请将其粘贴到下面: “''js 你的代码在这里 ``` 行为准则 [x] 我同意遵守本项目的行为准则

sumasal

给急躁者的临时变通办法:

GJS Helper

看起来你发现了GrapesJS dev分支中的一个bug,即即使编辑器处于预览模式,组件拖拽仍然可能。这确实与预期行为相反,因为预览模式应禁用所有编辑操作,包括拖动、调整大小和选择组件,以提供真正的只读视图。 预期行为 当调用editor.setPreview(true)时,GrapesJS设计为切换为非交互模式。这通常包括: 隐藏编辑器面板和工具栏。 禁用组件选择和高亮功能。 防止所有组件的拖放操作。 禁用调整尺寸的把手。 根本原因(假说) 虽然editor.setPre...

浏览所有主题