#53532023年9月1日作者 rozek3 个回答
GrapesJS 版本[X] 我确认使用最新版本 GrapesJS你用的是什么浏览器? 版本 1.56.20 Chromium:115.0.5790.171(Offizieller 构建)(arm64)可复制演示链接 没有描述一下那个虫子 已建立的联系 不能引用JavaScript模块,否则可能会遇到以下错误: 这使得将现代JavaScript与 GrapesJS结合使用变得非常困难 行为准则[X] 我同意遵守本项目的行为准则
artf
“''js 剧本:[ { src: '...file.js',类型:'module'}, ], ```
GJS Helper
你遇到的问题是“Uncaught SyntaxError: Cannot use import statement outside outside a module”,是因为GrapesJS中的canvas.scripts选项注入了使用标准<script>标签的脚本URL。默认情况下,浏览器将这些视为经典脚本,不支持ES模块语法(import/export)。要使用现代JavaScript模块,脚本标签必须明确包含type="module"属性。 由于canvas.scri...
#53522023年8月31日作者 rozek3 个回答
GrapesJS 版本 [X] 我确认使用最新版本 GrapesJS 你用的是什么浏览器? 版本 1.56.20 Chromium:115.0.5790.171(Offizieller 构建)(arm64) 可复制演示链接 没有 描述一下那个虫子 我有一个带有脚本的组件类型 在使用此类组件预览项目时, GrapesJS 会创建以下 HTML 如果你仔细检查这个输出,会发现内 script () { 没有正确关闭。 我已经尝试过一些变通方法,但还没成功。不过我会继续尝试,因为这个问题最终成了障碍...... 行为准则 [X] 我同意遵守本项目的行为准则
rozek
这很有趣:定义一个独立的功能 以及定义文档中描述的组件类型 按设计运作。 但听起来还是很奇怪,内联函数在导出的HTML中会出现语法错误......
GJS Helper
你遇到的 Uncaught SyntaxError: Unexpected token '{' 源于 GrapesJS 如何处理和嵌入使用ES6方法简写语法定义的组件脚本。当 script 属性的 toString() 表示包含函数签名时,这个问题是已知的行为。 根本原因 当你这样定义组件的 script 属性时: 这是一个 ES6 方法的定义。当 GrapesJS 在内部调用该函数的 toString() 将其嵌入 HTML 时,结果是一个包含方法签名的字符串,例如: "...
#53422023年8月26日作者 wsaca1 个回答
GrapesJS 版本 [X] 我确认使用最新版本 GrapesJS 你用的是什么浏览器? Firefox 116.0.3 可复制演示链接 https://grapesjs.com/demo-mjml.html 描述一下那个虫子 如何复现这个漏洞?在画布上滚动到底部并选择一个组件打开层次选择画布顶部的组件,滚动功能无法使用。 预期的行为是什么? 滚动应该能用。 目前的行为是什么? 滚动不起作用。 如果需要执行某些代码以重现该漏洞,请将其粘贴到下面: 错误可能在这行: https://github.com/GrapesJS/grapesjs/blob/v0.21.4/src/canvas/view/FrameView.ts#L153...
GJS Helper
你准确指出了GrapesJS中的一个bug,scrollCanvas功能无法滚动画布以显示所选组件,尤其是在从图层面板中选择组件时。这个问题在MJML演示中可重现,源于对哪个元素负责iframe滚动的错误假设。 根本原因: scrollCanvas方法通过src/canvas/view/FrameView.ts中的getOffsetRect,尝试通过this.getBody().scrollTop和this.getBody().scrollLeft来获取当前滚动位置。然而,...
#53342023年8月24日作者 DreamCloudProject4 个回答
GrapesJS 版本 [X] 我确认使用最新版本 GrapesJS 你用的是什么浏览器? Chrome、Opera、Edge 等 可复制演示链接 https://jsfiddle.net/crszh0jo/6/ 描述一下那个虫子 我正试图让它像这里描述的那样工作[[问题] Canvas #951 无法选择自定义组件(https://github.com/GrapesJS/grapesjs/issues/951),但还是没成功。 我怎样才能让从画布选择和从图层管理器选择一样工作?因为这里描述的解决方案对我来说不适用。我需要允许用户从画布中选择自定义组件,而不是每次都打开图层管理器。 行为准则 [X] 我同意遵守本项目的行为准则
DreamCloudProject
@artf 是的,你说得对。我阻止了点击传播,所以编辑器无法接收点击事件,因此无法执行选择元素的逻辑。 我尝试通过在组件内将“e.stopPropagation()”替换为“e.preventDefault()”,将点击传播设置为仅对当前元素进行,现在编辑器中的元素选择逻辑正常了。问题似乎已经解决了。谢谢!
DreamCloudProject
https://github.com/GrapesJS/grapesjs/assets/7961936/12180b41-4c29-489d-9bcd-1ea025a96a8f 这个例子展示了它在我的编辑器中的工作原理。
yatoogamii
你好@DreamCloudProject,看起来你的组件MSC头锁住了。这是一个属性,允许从图层点击组件,但不能从Canva本身点击 你能分享或验证你的组件定义,并检查“锁定”属性是否设置为true吗?
#53192023年8月18日作者 AFriboulet-ii2 个回答
GrapesJS 版本 [X] 我确认使用最新版本 GrapesJS 你用的是什么浏览器? Chrome V116.0.5845.96 可复制演示链接 https://jsfiddle.net/AdrienFriboulet/npdkshaf/8/ 描述一下那个虫子 https://github.com/GrapesJS/grapesjs/assets/128728949/e85b65c4-53ad-43d0-9f5f-74dc0a181dd0 如何复现这个漏洞?开放提供的小提琴 [此处](https://jsfiddle.net/AdrienFriboulet/npdkshaf/8/)删除一个组成部分的“段落”选择之前的组件,下...
artf
谢谢@AFriboulet-ii,我会在下次发布时修复。
GJS Helper
你描述的问题是GrapesJS中已知的行为,撤销管理器会正确还原组件的模型属性(包括其classes集合),但负责渲染组件的ComponentView在撤销操作后并不总是视觉上重新同步其DOM元素的classList。这导致视觉上的差异,组件仍然显示与已移除的类相关的样式。 根本原因 当你向组件添加类时,GrapesJS会更新组件的内部classes属性(即Selector模型的集合)。ComponentView监听该集合的变更,并调用其syncClasses方法更新实际D...
#53162023年8月17日作者 BenKhz3 个回答
GrapesJS 版本[X] 我确认使用最新版本 GrapesJS你用的是什么浏览器? Chrome v115.0.5790.170可复制演示链接 https://jsfiddle.net/BenKhz/yfwqc6mu/1/ 引用[此处文档](https://grapesjs.com/docs/api/selector_manager.html#available-events)描述一下那个虫子开放式提供的小提琴 [此处](https://jsfiddle.net/BenKhz/yfwqc6mu/1/)在 Canvas 上选择一个组件,并通过选择器管理器添加类别。(add 和 update 事件将被捕获)从类管理器中移除一个类e...
artf
你好,@BenKhz之所以这样,是因为“selector*”事件与全局Selectors容器有关(当你从组件中移除选择器时,Selector本身仍然存在,因为它可以在其他地方使用),如果你想跟踪组件选择器的变化,必须使用'component:update:classes'事件
BenKhz
啊!我误会了。谢谢你的澄清。继续加油!
GJS Helper
感谢你举报这个问题并对GrapesJS的善意评价!你提到了一个关于GrapesJS事件的常见困惑点,这是个很好的问题。 根本原因解释 selector:remove事件,正如选择器管理器的GrapesJS API所述,当选择器管理器的全局可选集合中移除Selector模型时触发。这与从特定组件中移除类(由Selector模型表示)不同。 当你通过界面向组件添加类时,如果该类(例如my-class)在选择器管理器的集合中还没有作为Selector模型存在,GrapesJS会为...
#53052023年8月13日作者 rajevar2 个回答
GrapesJS 版本 0.21.4[X] 我确认使用最新版本 GrapesJS你用的是什么浏览器? Chrome 版本 113.0.5672.63可复制演示链接 https://jsfiddle.net/szLp8h4n/11/描述一下那个虫子 如何复现这个漏洞? 在页面上移动任何文本组件。 警报将会显示。 可能是倒退。 https://github.com/GrapesJS/grapesjs/issues/868 没看到重新开启bug的选项,所以新建一个。 预期的行为是什么? 警报只会在向画布添加新组件时显示 目前的行为是什么? 如果需要执行某些代码以重现该漏洞,请将其粘贴到下面: 行为准则[X] 我同意遵守本项目的行为准则
artf
你好@rajevar我觉得你是在找“component:create”事件,因为“component:add”是正常工作的(比如用来跟踪某个组件内的任何新移动)
GJS Helper
你正确地指出了事件处理中常见GrapesJS混淆点。component:add事件确实不仅在新组件从块面板拖拽到画布上时触发,也在现有组件在画布上移动时触发。 根本原因解释 这种行为源于GrapesJS内部处理组件移动的方式。当你拖拽现有组件到画布的新位置时,GrapesJS执行一个内部操作,实际上包括: 将组件从其原始父/位置移除。 将组件添加到其新的父/位置。 因为组件内部被“添加”回DOM树(即使是同一个组件实例),component:add事件会被触发。这是一种简化...
#52802023年8月7日作者 fluke7772 个回答
GrapesJS 版本 [X] 我确认使用最新版本 GrapesJS 你用的是什么浏览器? Chrome 版本 115.0.5790.114 可复制演示链接 https://jsfiddle.net/mcraf3se/5/ 描述一下那个虫子 你好,我刚从 GrapesJS 开始,所以很可能我误解了某些根本性的问题。 我在为自定义组件视图设置事件处理程序时遇到了困难。 如何复现这个漏洞? 在链接的JS小提琴中。将我的分区拖拽到画布上点击其中(应该有带有“stuff”的div)。 预期的行为是什么? 根据文档[这里](https://grapesjs.com/docs/modules/Components.html#define-cu...
artf
这里的错误是用了箭头函数,只需用 'clickOnElement() {' 来替代它
GJS Helper
你遇到的问题是,this在自定义组件的视图事件处理程序中window或undefined,是常见的JavaScriptthis绑定问题,尤其是在使用箭头函数时。这不是GrapesJS的bug,而是对对象方法中箭头函数this工作的误解。 根本原因 在JavaScript中,箭头函数(() => { ... })词法绑定this。这意味着它们没有自己的this上下文;相反,它们继承了定义时的包围作用域的this。在像你view定义这样的对象文字上下文中,词汇this通常是全局...
#52742023年8月3日作者 wunksert4 个回答
GrapesJS 版本 [X] 我确认使用最新版本 GrapesJS 你用的是什么浏览器? Chrome v114 可复制演示链接 https://github.com/wunksert/remix-grapes-error/tree/main 描述一下那个虫子 如何复现这个漏洞?上文的克隆仓库NPM INPM 运行开发 你会看到 grapes iframe和样板都被渲染到了画布里。尝试导出,你会发现所有 grapes 样板也都渲染到画布里打开开发工具,你会看到错误: 补充背景 预期的行为是什么? 编辑器应该正确地渲染它的样板,和它一样 目前的行为是什么? 解析器似乎不起作用。编辑器渲染的是用于封装编辑器DOM的iframe。它还...
artf
@wunksert看起来编辑器会多次初始化自己,你是否正确地用 destroy 清除编辑器实例(例如在 useEffect 中)?
wunksert
也许我编辑项目中的结构或命名规范,解决这个问题会更简单。如果比在 GrapesJS Core 里改动更快,我很乐意这么做。
#52682023年8月2日作者 SLain1233 个回答
GrapesJS 版本 [X] 我确认使用最新版本 GrapesJS 你用的是什么浏览器? Chrome v115 可复制演示链接 https://grapesjs.com/demo.html 描述一下那个虫子 如何复现这个漏洞?将视频组件拖放到画布上。选择YouTube或Vimeo并添加视频ID。激活自动播放复选框。发布或预览页面。 预期的行为是什么? 视频必须在用户打开页面后自动播放。 目前的行为是什么? 视频无法启动。行为准则 [X] 我同意遵守本项目的行为准则
SLain123
我自己能修复这个bug,但我无法用fix把分支推送到仓库。看起来我没有推送或创建新分支的权限。
artf
@SLain123你必须从分支 https://stackoverflow.com/questions/38918942/pull-request-from-a-different-repository 创建一个PR
GJS Helper
你遇到的YouTube和Vimeo自动播放无法GrapesJS正常工作的问题,并不是GrapesJS本身的bug,而是现代浏览器自动播放政策的结果。像Chrome、Firefox和Safari这样的浏览器已经实施了严格规则,以防止不想要的媒体播放,这会干扰用户并消耗数据。 根本原因:浏览器自动播放政策 大多数现代浏览器会阻止有声音的自动播放视频,除非满足特定条件。最常见的条件包括: 视频静音: 如果视频以静音状态开始播放,浏览器通常允许自动播放。 用户互动: 如果用户已与页...