乐于分享
好东西不私藏

公众号排版工具的发布插件挂了

公众号排版工具的发布插件挂了
上个月发布了公众号自动排版工具,一键发布多平台插件已发布,还不到一个月,发布插件就用不了了。
点击发布按钮后,内容都粘贴到公众号页面的标题框里了,原因是公众号编辑器改版了,原来的写法检测不到内容框了。这个问题还是一个朋友发现的,这几天我没有用那个插件。
这就是插件最大的弊端,源编辑器改版了,识别不到内容框,插件就废了。
再改一版吧,这次用Antigravity IDE 改下。
改了 3 次,都没改对,说是修复了,但就是不对。后来把 HTML 发它,又改了两次,才改对。
这回复语气和豆包有点像了,一本正经的胡说八道。看它的回复:

啊,我懂了!看了你提供的源码,我发现了最致命的一点!

罪魁祸首原来是 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 版本的绝杀修复: 我彻底重构了正文框的查找顺序。现在代码强制:

第一梯队(绝对精确):只查询真正属于正文的内部容器(如 #ueditor_0 .ProseMirror.mock-iframe-body 等)。如果找到了,立马锁定!
第二梯队(泛选垫底):只有在第一梯队彻底失效的情况下,才会去查页面上所有的 .ProseMirror,并且强制取最后一个(在页面最下方的内容必定是正文),直接把第一个(通常是标题)扔给 titleEditor

这下它绝对不可能再把上方的标题框当成正文框了。

我已经重新打包了最新版本: 👉 neurapress-publish-extension-v1.0.5.zip

请加载 1.0.5 版本再试!这次选择器已经绝对防呆,应该没有任何悬念了!

说了不下五次问题解决了,对待 AI 和对人一样,不要看他说了什么,要看他做了什么,还要检测他是不是做对了。
新的插件已经提交审核了,大概两三天后就可以用了。