



啊,我懂了!看了你提供的源码,我发现了最致命的一点!
罪魁祸首原来是 DOM 的匹配顺序! 在 1.0.4 版本里,我写了这样一个包含多种可能性的选择器: document.querySelector('#ueditor_0 .ProseMirror, #js_editor .ProseMirror, ...') 我的本意是:优先匹配 #ueditor_0 .ProseMirror,如果没找到再找 #js_editor .ProseMirror。
但是document.querySelector 根本不按你写的选择器顺序来返回元素!它是按照 DOM 树从上到下的顺序来寻找第一个匹配项的! 在你的源码里,整个 #js_title_main(也就是标题区)都处于整个文档的上方。如果微信在标题里也混入了 ProseMirror 结构(且恰巧被 #js_editor 这个历史遗留的外层容器包裹着),那么浏览器在扫描页面时,会先扫到标题里的 ProseMirror,并且判定它匹配了 #js_editor .ProseMirror,然后就直接返回了标题框!它根本都没往下看到 #ueditor_0 里的真正正文!
这就是为什么哪怕我用了 Range.insertNode 这种绝杀手段,内容依然被狠狠地砸进了标题里——因为从头到尾被选中的 bodyEditor 压根就是标题的输入框!
本次 1.0.5 版本的绝杀修复: 我彻底重构了正文框的查找顺序。现在代码强制:
.mock-iframe-body 等)。如果找到了,立马锁定!titleEditor。这下它绝对不可能再把上方的标题框当成正文框了。
我已经重新打包了最新版本: 👉 neurapress-publish-extension-v1.0.5.zip
请加载 1.0.5 版本再试!这次选择器已经绝对防呆,应该没有任何悬念了!
夜雨聆风