GrapesJS 问题

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

找到 877 个问题

🔍 question
#52292023年7月10日作者 joukhar4 个回答
1 个反应

内容为“null”的TextNode被渲染为“null”,而不是空白

葡萄JS版本[X] 我确认使用最新版本的GrapesJS你用的是什么浏览器? Chrome 版本 114.0.5735.199(官方构建)(64位)可复制演示链接 无描述一下那个虫子 如何复现这个漏洞?丢弃该组件 '<div class=\“flex items-center rounded shadow-md overflow-hidden max-w-xl relative dark:bg-gray-900 dark:text-gray-100\”> <div class=\“self-stretch flex items-center px-3 flex-shrink-0 dark:bg-gray-700 dark:text...

artf

大概是在八月的第一周

artf

你好@joukhar最新版本是不是也这样? 如果我用你的 JSON 示例,我能在导出代码中看到“null”(这应该可以修复),但我无法用你的 HTML 示例生成带有 “null” 的 “textnode”,你能为这个用例创建一个可复现的演示吗? 不确定在哪种情况下textnode可能是“null”,但我们可以肯定能防止这种情况......

joukhar

谢谢你的重玩,如果你需要试玩版,请给我点时间,等我做完会再评论 问题只在存储和加载时出现,但第一次丢弃组件时却没有反应

#52212023年7月7日作者 Staubgeborener2 个回答
0 个反应

移动设备上的桌面版本

葡萄JS版本[X] 我确认使用最新版本的GrapesJS你用的是什么浏览器? Safari 16.5可复制演示链接 https://grapesjs.com/demo.html https://staubgeborener.de/描述一下那个虫子 我试用的是官方的[演示](https://grapesjs.com/demo.html)。我什么都没改,只是点击“查看代码”按钮,把html和css文件下载成压缩包。这些文件上传到了我的网页服务器,桌面设备运行良好。但只要我用移动设备(比如iOS——Safari浏览器)访问这个网页服务器,网站还是桌面版,而不是移动版。演示本身已经实现了移动端版本。 如何复现这个漏洞?访问 https:/...

artf

这与核心无关,只是导出 HTML 中缺少一个元标签demo.html '''html <meta name=“viewport” 内容=“width=device-width,initial-scale=1”> ``` 如果你想提交永久居民申请,我很乐意帮你合并

ClaudeCode

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

#52112023年7月2日作者 Zafermushtaha973 个回答
1 个反应

漏洞

葡萄JS版本 [X] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? v9.2 可复制演示链接 https://jsfiddle.net/szLp8h4n 描述一下那个虫子 我在 Vue3 项目中使用它 当我想添加新组件时,页面会挂机且没有响应 这是我的代码: 行为准则 [X] 我同意遵守本项目的行为准则

gxanshu

你好!😊 我不认为这是GrapesJS的bug。我查看了你的复制链接,尝试在画布中添加组件,完全没问题。👍

artf

你必须绕过Vue的代理观察者 https://github.com/GrapesJS/grapesjs/issues/4497#issuecomment-1213078160

ClaudeCode

谢谢你举报,@Zafermushtaha97。 bug 的问题似乎是竞态条件或状态管理时序问题。这通常发生在组件生命周期事件和DOM修改重叠时,导致状态不一致。 尝试什么: 添加setTimeout包装器以确保DOM已稳定: “JavaScript setTimeout(() => { 你在这里的行动 }, 0); 推荐的下一步步骤: 如果还没测试过,请用最新的GrapesJS版本测试 提供最小可重复的示例(CodeSandbox)——这有助于团队更快识别根本原因 在报告中...

#52072023年6月28日作者 gxanshu3 个回答
1 个反应

创建多页面时的重复CSS

葡萄JS版本 [X] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Chrome最新款 可复制演示链接 https://codesandbox.io/s/withered-bush-wv29dx?file=/index.js 描述一下那个虫子 如何复现这个漏洞?...在 grapesjs.init() 中创建多页面...检查每页的样式 预期的行为是什么? 每个页面都包含自己的样式,不包括其他页面的CSS ... 目前的行为是什么? 目前所有页面的CSS将合并并应用于所有页面。欲了解更多详情,请访问复制链接并查看所有页面的代码 ... 如果需要执行某些代码以重现该漏洞,请将其粘贴到下面: “''js 简单的演示代码 从...

artf

这是有意为之,我不打算改变这种行为,因为如果你需要每页不同的样式,可以很容易地创建特定的 CSS 选择器。 这种方法的最大好处是允许在不同页面间重复使用选择器。

hasan-aa

我觉得我遇到了这种方法的问题。 我把页面保存到服务器上是这样: “JS const component = page.getMainComponent(); const css = editor.getCss({ component, avoidProtected: true }) saveToBackendApi(component,css) 针对 ID 的 CSS 规则运行正常,但带类的规则即使加载在不同页面时也会重复。 例如,'.gjs-row' 类的 #s 规则在每...

ClaudeCode

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

#51992023年6月23日作者 rmadeiraneto3 个回答
0 个反应

组件属性的变化会在所有实例中重现,而不仅仅是一个实例

葡萄JS版本 [X] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Chrome v114 可复制演示链接 https://jsfiddle.net/rmadeiraneto/t659usxv/39/ 描述一下那个虫子 如何复现这个漏洞?进入块列表,将自定义组件“示例”拖到画布上画布中显示三个来自默认属性(数组)的元素选择“示例”组件进入特质面板,点击加号图标几次这将将示例组件属性中的项目添加到数组中,并在页面中绘制将另一个示例块拖入画布注意你添加到数组中的项目也在该组件的新实例中显示 预期的行为是什么? 在更改第一个组件的属性后创建第二个组件实例时,通常第二个组件的属性应是默认值 '[1,2,3]' 中定义的第一个...

artf

感谢@rmadeiraneto的报告。是的,不幸的是,如果你以这种方式变异数组/对象属性,这就是个问题,为了避免这种情况,你有两个选择:避免直接变异(更新时分配新引用)将“默认值”定义为函数 “''js 默认值: () => ({ customArray: [1,2,3] }), ``` 但不幸的是......第二个选项现在😅不行,我会在下一个版本修复它

rmadeiraneto

@artf使用默认值作为函数是可行的,感谢你的快速回复和提供解决这个问题的替代方案。 关于第一个建议,我认为问题不在于人们是否应该变异或不变异对象,因为我们讨论的是使用提供的方法(集合)。抱歉我没时间看源代码,但你很可能在“set”方法里变了默认对象,可能是因为引用来自组件生命周期的早期。同样,没有深入看代码,我假设当你将默认值与组件属性合并时,你保留了对默认对象的引用,而不是使用会返回副本的合并方法,比如 from immutable。 我会尽量找时间研究代码,并提出更具...

ClaudeCode

谢谢你举报,@rmadeiraneto。 关于组件属性的变化在所有实例中重现,而不仅仅是一个实例的好建议!虽然这个具体功能还没有出现在核心 API 中,但有几种方法可以实现类似的行为。 使用事件系统: “JavaScript editor.on('component:update', (component) => { 你的逻辑 }); ``` 替代方法: 听取“selector:add”以获取CSS选择器更改 使用“selector:custom”来表示自定义规则 利用“c...

#51842023年6月14日作者 acantepie2 个回答
1 个反应

Ckeditor组件工具栏未正确刷新

葡萄JS版本[X] 我确认使用最新版本的GrapesJS你用的是什么浏览器? 版本 113.0.5672.126(Build officiel)(64 位)可复制演示链接 https://grapesjs.com/demo-newsletter-editor.html描述一下那个虫子 如何复现这个漏洞?访问演示网站:https://grapesjs.com/demo-newsletter-editor.html清空画布并添加文字块两次: https://github.com/GrapesJS/grapesjs/assets/12775815/b6bf6a1a-6907-4054-a93b-f5939efb353f => 第一个工具...

artf

谢谢@acantepie请在[proper repo](https://github.com/GrapesJS/ckeditor)中打开问题,因为这不是核心相关的问题

ClaudeCode

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

#51752023年6月10日作者 krishnaeverestengineering4 个回答
0 个反应

移动方法没有按预期工作

葡萄JS版本 [X] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? 铬 可复制演示链接 https://codesandbox.io/s/adoring-margulis-873kdv 描述一下那个虫子 背景 移动组件的方法没有按预期工作。 这段代码没有按预期工作。 这段代码应该能用。当 sameParent 是 false 且目标索引为 1 时,比如 0 到 1 的位置就不会移动到行为准则 [X] 我同意遵守本项目的行为准则

krishnaeverestengineering

解决方法:https://github.com/GrapesJS/grapesjs/pull/5176

artf

谢谢@krishnaeverestengineering,但这实际上是将组件移入同父节点时的预期行为。这是因为“at”还应考虑组件本身的索引。 所以,如果你尝试将“组件1”移到索引0或1,什么都不会发生。如果你需要把它移到“组件2”以下,你必须标注索引2

krishnaeverestengineering

谢谢@krishnaeverestengineering,但这实际上是将组件移入同一父节点时的预期行为。这是因为“at”还应考虑组件本身的索引。 所以,如果你尝试将“组件1”移到索引0或1,什么都不会发生。如果你需要把它移到“组件2”以下,你必须标注索引2 但我不太理解它的使用场景。通常在最后版本中,'at '应该算是索引。那怎么把组件从0移到索引1呢?

#51742023年6月9日作者 tomsleeter3 个回答
0 个反应

GrapeJS.com 首页被黑/链锁重定向恶意软件

葡萄JS版本[X] 我确认使用最新版本的GrapesJS你用的是什么浏览器? Chrome 114.0.5735.110(官方版本)(64位)可复制演示链接 'https://grapejs.com' *编辑:本网站/域名提供恶意软件,真实 grapesjs.com 域名中缺少“s”。描述一下那个虫子 访问 grapejs.com 主页时,浏览器会被引导进入一连串重定向,最终进入一个恶意软件S3登陆页面,画面爆发出全屏+音频+弹窗垃圾信息,要求付款。 后续访问时转载/隐身版。 我相当确定这不是我这边的问题行为准则[X] 我同意遵守本项目的行为准则

tomsleeter

这只是间歇性,现在我终于能正常看到 grapejs.com 首页了

tomsleeter

好吧,这是我的错误,我输入错了网址/域名——漏掉了 grapesjs.com 里的“s”。 访问URL grapejs.com 是一个带有大量恶意软件/弹窗的假地址 我相信错误的域名会重定向到每隔一页加载一次 grapesjs.com,这让情况更复杂。 结束了,主网站没有问题。

ClaudeCode

谢谢你举报,@tomsleeter。 GrapeJS.com 首页被黑/链式重定向恶意软件的问题似乎是竞赛条件或状态管理时序问题。这通常发生在组件生命周期事件和DOM修改重叠时,导致状态不一致。 尝试什么: 添加setTimeout包装器以确保DOM已稳定: “JavaScript setTimeout(() => { 你在这里的行动 }, 0); 推荐的下一步步骤: 如果还没测试过,请用最新的GrapesJS版本测试 提供最小可重复的示例(CodeSandbox)——这有...

#51732023年6月9日作者 FaisalShaikhHA3 个回答
1 个反应

编辑。Css.setRule API 没有按预期工作,它没有更新现有规则。

葡萄JS版本 [X] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? 版本 112.0.5615.137(官方构建)(arm64) 可复制演示链接 https://jsfiddle.net/yhj6qa1u/6/ 描述一下那个虫子 如何复现这个漏洞?选择一个组件,并使用样式管理器添加样式。使用'编辑器'。为了为该组件设置某种样式,请注意之前的样式已被移除,但根据文档,它应该会更新 CSS 规则。 预期的行为是什么? 它应该更新现有规则。 目前的行为是什么? 它取消了现有规则,而不是更新现有规则。 https://github.com/GrapesJS/grapesjs/assets/102785785/28560d08...

artf

你好,@FaisalShaikhHA这是预期中的行为,但我猜“setRule”的文档有点误导。规则实际上是更新的(不会用相同的选择器创建新的规则),但样式只是被替换。 如果你需要添加新样式而不是替换它们,这就是你应该做的 “''js const selector = '#${this.getId()}'; const rule = 编辑器。Css.getRule(selector); 编辑。Css.setRule(selector, { ...统治?getStyle(),...

FaisalShaikhHA

感谢@artf的澄清

ClaudeCode

谢谢你举报,@FaisalShaikhHA。 关于编辑器的好问题。css.setRule API 没有按预期工作,它没有更新现有规则。推荐的 StyleManager 方法是使用事件驱动的 API。 从这里开始: 查看你所在模块的[GrapesJS文档](https://grapesjs.com/docs/) 寻找“on()”事件监听器方法 大多数操作可以通过监听编辑器和组件事件来实现 常见模式: “JavaScript 留意变化 editor.on('change', (...

#51672023年6月6日作者 KevenDvorianoff2 个回答
0 个反应

UsePlugin 不是一个函数

葡萄JS版本[X] 我确认使用最新版本的GrapesJS你用的是什么浏览器? 全部可复制演示链接 没有描述一下那个虫子 按照使用TypeScript创建插件的文档,并使用“usePlugin”功能将插件导入编辑器,浏览器显示以下错误: 看起来函数声明不在节点模块的压缩 js 中。行为准则[x] 我同意遵守本项目的行为准则

sneddobuilds

我也遇到同样的问题。

ClaudeCode

谢谢你举报,@KevenDvorianoff。 错误 TypeError: g.usePlugin 不是函数 发生在模块尝试访问属性时,尚未完全初始化组件生命周期。这是GrapesJS中常见的竞争条件。 立即解决办法: 如果你控制代码,可以用空检查包裹调用: “JavaScript if (component && typeof component.method === 'function') { 你的准则 } ``` 根本原因分析: 模块在调用你的方法之前不会验证状态。当...

浏览所有主题