GrapesJS 问题

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

找到 466 个问题

🔍 components
#67062026年2月13日作者 saeedhbi3 个回答
0 个反应

TypeError:e.getRoot 不是函数(样式管理器中的竞态条件)

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? 所有浏览器(Chrome、Safari、Firefox、Edge) 可复制演示链接 https://jsfiddle.net/saeedhbi/powxyjdq/3/ 描述一下那个虫子 如何复现这个漏洞? 初始化 GrapesJS 编辑器 选择画布中的一个组件 快速删除组件(按删除键或使用删除命令) 样式管理器的去跳出更新回调在组件被销毁后执行 注意“类型错误:e.getRoot 不是函数” 预期的行为是什么? 样式管理器应在尝试调用组件的方法前验证组件仍然有效。要么: 在处理前过滤掉损坏或无效的组件 在组件方法调用周围添加try-catch...

artf

和 https://github.com/GrapesJS/grapesjs/issues/6705 类似 我无法创建那种竞态条件(例如通过 API 选择和移除),在你的例子中是在组件上检查 getRoot,但组件 API 上没有这样的方法

saeedhbi

和 https://github.com/GrapesJS/grapesjs/issues/6705#issuecomment-3921025039 一样,问题出在我们外部库,使用 GrapesJS,因为遇到了类似 6705 问题的情况,我会关闭它。感谢你的评论。

ClaudeCode

谢谢你举报,@saeedhbi。 关于TypeError: e.getRoot不是函数(样式管理器中的竞态条件),这个问题很棒。推荐的 StyleManager 方法是使用事件驱动的 API。 从这里开始: 查看你所在模块的[GrapesJS文档](https://grapesjs.com/docs/) 寻找“on()”事件监听器方法 大多数操作可以通过监听编辑器和组件事件来实现 常见模式: “JavaScript 留意变化 editor.on('change', () =...

#67052026年2月13日作者 saeedhbi3 个回答
1 个反应

TypeError:无法读取键盘处理程序中未定义属性(读取“toLowerCase”)

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? 所有浏览器(Chrome、Safari、Firefox、Edge) 可复制演示链接 https://jsfiddle.net/saeedhbi/tdsLa6qe/ 描述一下那个虫子 如何复现这个漏洞? 创建一个基础的GrapesJS编辑器(版本0.22.11或0.22.14) 向画布添加输入字段组件 聚焦输入场 发送一个键盘事件,其中“event.key”为“未定义”,用于IME作曲事件(主要是中文/日文/韩文键盘) 观察“类型错误:无法读取控制台中未定义属性(读为”toLowerCase“)” 预期的行为是什么? 键盘处理器应优雅地处理“e...

saeedhbi

你好@artf,在深入挖掘全栈跟踪后,我发现错误不在 GrapesJS 里。 “event.key.toLowerCase()”调用来自我们自己的应用代码——一个全局代码 'window.addEventListener(“keydown”, ...)我们在代码库中其他地方有处理程序, 与GrapesJS并行运行。因为我们的webpack构建将多个模块捆绑成同一个块 ('dist/1348'),哨兵框架具有误导性,我们错误地将来源归于GrapesJS。 GrapesJS 自...

artf

嘿,@saeedhbi,你在我们的代码里到底在哪里看到“event.key.toLowerCase()”?你确定不是你这边的吗? 可惜jsfiddle帮不上忙,感觉AI太粗糙😅,甚至连编辑器都加载不了。 也许你可以分享全栈的跟踪,看看具体发生在哪里?

ClaudeCode

谢谢你举报,@saeedhbi。 关于TypeError:无法读取键盘处理程序中未定义属性(读取“toLowerCase”)的好问题。推荐的 Canvas 方法是使用事件驱动的 API。 从这里开始: 查看你所在模块的[GrapesJS文档](https://grapesjs.com/docs/) 寻找“on()”事件监听器方法 大多数操作可以通过监听编辑器和组件事件来实现 常见模式: “JavaScript 留意变化 editor.on('change', () => c...

#66962026年2月4日作者 jasonvijayy1 个回答
0 个反应

在启用UndoManager的生命周期事件中调用component.replaceWith()时崩溃

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? 铬 可复制演示链接 https://codepen.io/Logeshwaran-codepen/pen/raLJpYb 描述一下那个虫子 如何复现这个漏洞? 选择canvas中可用的组件。监听生命周期事件(例如 component:selected) 在事件处理程序内调用component.replaceWith() 执行撤销 预期的行为是什么? Undo 应安全恢复编辑器状态且无错误,GrapesJS 应提供支持的生命周期事件中替换组件的方法。 目前的行为是什么? 撤销崩溃是因为GrapesJS试图恢复一个已不存在组件的选择/状态。 问题...

ClaudeCode

谢谢你举报,@jasonvijayy。 关于在启用UndoManager时调用component.replaceWith()时调用component.replaceWith()时崩溃的好问题。ProseMirror 推荐的方法是使用事件驱动的 API。 从这里开始: 查看你所在模块的[GrapesJS文档](https://grapesjs.com/docs/) 寻找“on()”事件监听器方法 大多数操作可以通过监听编辑器和组件事件来实现 常见模式: “JavaScript...

#66852026年1月12日作者 shery4 个回答
0 个反应

自定义组件样式在删除和重新添加后不会被应用

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Chrome v143.0.7499.193 可复制演示链接 https://codesandbox.io/p/sandbox/2l3887 描述一下那个虫子 如何复现这个漏洞? 打开页面并加载 GrapesJS 编辑器 选择行组件并删除它 点击左侧边栏的行组件,向画布添加行 预期的行为是什么? 新添加的行组件应显示正确的样式(白色背景、边框、边框半径、填充等)。 目前的行为是什么? 重新添加 Row 组件后,styles 属性中定义的 .gjs-row CSS 类未应用到 DOM 元素,导致样式缺失,组件显示为无样式的纯文本容器 如果需要执...

mdmontesinos

我也遇到类似问题,重新添加的组件拥有正确的样式属性: <img width=“1112” height=“17” alt=“Image” src=“https://github.com/user-attachments/assets/474011c4-b1be-48df-9aa8-14c3dcdfc68d” /> 但如果我用“查看代码”按钮,CSS就没有注入,在我的情况下,它们甚至不在DOM里。组件本身能用,因为刚加入时样式确实注入了,运行正常。只有移除并重新添加后才会失败...

artf

@mdmontesinos你的用法不正确,“样式”必须在组件定义中定义,且不被期望改变。另外,如果组件预期会被重用,ID会被重新创建,依赖类,尤其是样式,那用ID定义组件是不对的。 但@shery的报告似乎是真实的;样式缓存可能有问题。

mdmontesinos

@artf我用ID是因为我的项目里总会有一个该组件的实例。我的用例是组件外部设计成作为“后台”,然后导入到使用该组件的项目中。因此,当外部组件更新时,我需要在项目中更新它,这也是我尝试重建它的原因,它可能会修改组件或样式。有没有办法强制刷新样式?

#66832026年1月7日作者 derikb3 个回答
0 个反应

模态在模态外的鼠标上行事件中关闭,而不是全键点击

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Chrome 143.0.7499.169 可复制演示链接 https://grapesjs.com/demo.html 描述一下那个虫子 如何复现这个漏洞? 将自定义代码组件拖入页面。 模态应自动打开,否则在预览中双击自定义代码组件。 在模态内点击并长按,然后将鼠标拖出模态,松开点击。 模态闭合。 预期的行为是什么? 在我看来,模态只有在模态外的全点击事件时才应该关闭。 目前的行为是什么? 模态似乎只在鼠标上行事件时关闭。 我查看了模态文件,但没有看到快速的解释说明为什么会这样。模态事件似乎都是“点击”事件......或者至少它们被标注为如...

derikb

仅供参考,我用演示页面作为可复现链接,虽然那个页面并没有使用最新版本的Grapesjs。我本地的代码用的是最新版本,也出现了同样的问题。

derikb

好的,我明白为什么会这样了。因为模态和周围背景都是包含事件的元素,所以鼠标下放、拖拽、上游标仍然被视为点击,因为它们都在同一元素上。Event.target 最终会在点击结果的位置(模态体外),并且通过了 ModalView.onClick 的测试,因此模态关闭了。 可以和Bootstrap的模态比较一下。他们把背景作为与模态体分开的元素,通过z-index放在模态体后面。这样,任何对模态体本身的点击都不会检测到背景元素上的事件,你可以在处理事件时测试 Event.curr...

ClaudeCode

谢谢你举报,@derikb。 关于模态在模态外的鼠标上行事件关闭而不是全点击时关闭的好问题。推荐的组件方法是使用事件驱动的API。 从这里开始: 查看你所在模块的[GrapesJS文档](https://grapesjs.com/docs/) 寻找“on()”事件监听器方法 大多数操作可以通过监听编辑器和组件事件来实现 常见模式: “JavaScript 留意变化 editor.on('change', () => console.log('something change...

#66782025年12月17日作者 J-Wick41 个回答
0 个反应

YouTube 现在要求嵌入视频 iframes 使用 referrerpolicy=“strict-origin-when-cross-origin” 属性才能正常播放。

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? 勇敢 可复制演示链接 不 描述一下那个虫子 如何复现这个漏洞? 试着在落地页添加YouTube视频,看看情况如何。 预期的行为是什么? YouTube 视频渲染并可播放 目前的行为是什么? YouTube会出错,要求用户访问 YouTube.com 观看视频,因为iframe代码中额外要求一个属性。 问题:YouTube 现在要求 referrerpolicy=“strict-origin-when-cross-origin” 属性 在嵌入视频iframe上进行正确播放。 renderYoutube() 和 renderYoutubeNoCo...

ClaudeCode

感谢你举报,@J-Wick4。 关于YouTube现在要求嵌入视频iframes上必须使用referrerpolicy=“strict-origin-when-cross-origin”属性才能正确播放,这建议很棒。!虽然这个具体功能还没有出现在核心 API 中,但有几种方法可以实现类似的行为。 使用事件系统: “JavaScript editor.on('component:update', (component) => { 你的逻辑 }); ``` 替代方法: 听取“s...

#66742025年12月14日作者 OfirD12 个回答
0 个反应

带有哈希导航的锚点链接在预览模式下无法使用

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Chrome 143.0.7499.41 可复制演示链接 https://jsfiddle.net/mghzw41k/2/ 描述一下那个虫子 在预览模式下,带有哈希导航的锚点链接(例如 href=“#section”)无法使用。 默认的浏览器导航行为被阻止了,尽管预览模式(我认为)应该允许正常的页面交互。 如何复现这个漏洞? 初始化GrapesJS编辑器 添加带有锚点链接的内容,指向一个部分:“<a href=”#about“>前往”,</a> 添加目标部分:“<section id=”about“>关于部分</section>” 进入预览模...

doudou673

我也遇到过同样的问题。

ClaudeCode

谢谢你举报,@OfirD1。 关于带哈希导航的锚点链接在预览模式下无法使用的建议很棒!虽然这个具体功能还没有出现在核心 API 中,但有几种方法可以实现类似的行为。 使用事件系统: “JavaScript editor.on('component:update', (component) => { 你的逻辑 }); ``` 替代方法: 听取“selector:add”以获取CSS选择器更改 使用“selector:custom”来表示自定义规则 利用“change:*”事件...

#66712025年12月9日作者 padcom2 个回答
1 个反应

'component.closestType()' 未定义

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? 任何 可复制演示链接 https://github.com/padcom/grapesjs-closestType-missing 描述一下那个虫子 这个漏洞是在[这里](https://github.com/GrapesJS/grapesjs/pull/6510/files#diff-d2f42c64bd3daa0eccd626801a25b531062462a74b919d051331f9d5ba0a84e0R326 年)中引入的。在这次变化之前,一切都按预期运作。我猜是“重置”事件造成的。 更让人烦恼的是,如果你重新加载页面,唯一会看到...

padcom

事实证明,第二个参数不总是组件,而是事件的发送者,这意味着有时它是组件集合,显然没有“closestType()”方法。 谢谢@artf给我解释!

ClaudeCode

谢谢你举报,@padcom。 关于'component.closestType()'未定义的好问题。推荐的 Canvas 方法是使用事件驱动的 API。 从这里开始: 查看你所在模块的[GrapesJS文档](https://grapesjs.com/docs/) 寻找“on()”事件监听器方法 大多数操作可以通过监听编辑器和组件事件来实现 常见模式: “JavaScript 留意变化 editor.on('change', () => console.log('somet...

#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高度是排序操作后实际保持元素在编辑器中的高度)。 这显然只是在根本问题解决前的权宜之计。

ClaudeCode

谢谢你举报,@lexoyo。 关于图层面板:拖放会让物品消失(Firefox和Chrome)的好问题。推荐的 StyleManager 方法是使用事件驱动的 API。 从这里开始: 查看你所在模块的[GrapesJS文档](https://grapesjs.com/docs/) 寻找“on()”事件监听器方法 大多数操作可以通过监听编辑器和组件事件来实现 常见模式: “JavaScript 留意变化 editor.on('change', () => console.log...

#66592025年11月25日作者 NilLlisterri4 个回答
1 个反应

符号样式未同步

GrapesJS版本 [x] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Firefox 145.0(64位) 可复制演示链接 https://jsfiddle.net/arturarseniev/ta19s6go/ 描述一下那个虫子 如何复现这个漏洞? 进入官方的[Symbols演示](https://jsfiddle.net/arturarseniev/ta19s6go/),创建一个符号并更改主符号的文字颜色。实例符号不会更新。 预期的行为是什么? 符号样式应更新,如[公关视频](https://github.com/GrapesJS/grapesjs/pull/3165)所示。 目前的行为是什么? 样式不会更...

NilLlisterri

明白了,如果我想在符号里样式并分享更改,我应该给它添加类。 谢谢你们的帮助!

lexoyo

你好 这个颜色被应用到元素上,在 Grapesjs 中,这意味着它会生成一个 CSS,比如 '#compid { color: red; }但 ID 在 HTML 页面中是唯一的,因此另一个符号的 ID 不同 这对我来说也是个问题,我不确定该怎么处理......也许@artf有点想法

artf

抱歉,这不是bug,而是“功能”。 😅 依我看,组件样式不应该绑定在符号上;这是覆盖同一符号之间样式的简单方法(很常见)。如果你需要相同的风格,你只需利用这些职业。

浏览所有主题