背景
Chrome扩展是什么?
Chrome 扩展是用于实现对Chrome浏览器增强或修改的小型软件。扩展开发可以使用标准的网络技术------HTML,JavaScript和CSS,它们可以从简单的工具(如颜色选择器)到更复杂的工具(如密码管理器)。
有兴趣的jym可以去深入了解一下Google的官方文档
掘金无法满足我
是的,我的诉求是,掘金能够提供文章模版的功能。在写文章时能够自动导入我定制的模版,如果可以最好能够定制多个模版,可以进行选择。
需要这个功能的原因是,在进行文章创作的时候,新的文章都是空白的标题和内容。
实际上,不同的创作者,对自己的文章有着偏好的框架结构或者Slogin、Ending之类的模式化内容。比如:
这些内容在每次写作时都要重复输入,浪费时间,效率低下。另外这些内容会随着分类不同有所差异,所以最好能支持多模版。
目前,我已经把这个功能诉求提交给了官方,但是:
- 官方不会有这么快的响应速度;
- 即使能够快速响应,也需要评估需求和排期;
- 社区还存在一些亟待解决的问题需要修复,优先级更高;
- 掘金官方还有一些"快马加鞭开发中"的功能,比如:投票、定时发布文章等等;
- Other......
总之就是遥遥无期,但是我又不想忍受每次去做这么多重复性的工作,而且耗心费力还有可能出错。
创意
于是,我想。如果能够开发一个用于掘金社区能力增强的Chrome浏览器扩展程序,就可以通过扩展程序提供的能力,配置文章模版,并在写文章的时候根据需求导入模版。
2023年11月26日,本周六。我萌发了这个想法之后,心痒难耐。在陪老婆逛了一天以后,终于在晚上7点前到家了。到家之后来不及洗漱就开始抱着电脑整理思路,争取能够尽快理清思路,开始开发。
写文章按钮
第一个想法是,点击扩展程序,popup页面展示写文章按钮。点击写文章按钮,跳转写文章页面并且自动导入配置好的文章模版。
写文章页面
第二个想法是,在写文章的页面,点击扩展程序,可以自动导入配置的文章模版。
最终的抉择
第一种确实很方便,但是扩展程序的原则是使用尽可能小的权限和最小的影响范围(具体请看Chrome扩展程序官方文档指导文档)。本着这种原则,还是决定,扩展程序只能在写文章的页面触发,而且这种方式还能较快扩展程序发布时审核的速度。
思路
开始写文章
在掘金社区的创作者中心,点击写文章进入写文章页面。
触发扩展程序
在写文章的页面点击扩展,开始导入配置好的文章模版。
导入模版
获取掘金增强扩展配置的文章模版,将模版内容写入文章内容区。
但是,问题来了,我在验证思路的过程中发现,掘金的文章内容输入区并不是传统的Textarea,甚至都不能通过js写入内容。猜想应该是使用监听点击事件,然后监听键盘输入,再根据键盘输入更新编辑区内容。
通过分析源码,基本上能够确定我的猜想,而这个监听和更新内容的逻辑是在chunk.xxxx.js文件中的,这个文件很可能是打包工具打包编译之后生成的文件,超38万+行代码,里面的变量和方法都是经过混淆和压缩的。
于是,我意识到直接导入模版的想法走不通了。截止到我决定放弃了这一思路时,已经晚上10点,老婆催促我洗漱了。
我的状态有点差,连续肝了三个小时,最终没有实质性的进展,确实很有挫败感。深吸一口气,我开始自言自语梳理思路,寻找其他可能性。然后拿着牙刷边刷牙,边在屋里来回踱步,脑子里面重复着刚才的过程。
叮,灵感来了。我在查看掘金编辑器的js源码的过程中发现,监听到键盘输入事件以后,在更新编辑器内容的同时,还调用了article_draft/update接口。这个接口的作用应该是用于记录编辑区内容。还调用了article/text_correction接口,用于记录编辑区的内容更改。这不就是很好的一个突破口吗?
我干嘛非得通过js方式自己去导入内容,通过接口对内容区内容进行更新,然后刷新页面,照样可以实现模版导入。
今日一早,开始验证我的想法,果不其然遇到了很多问题。比如接口跨域,cookie设置、参数传递等等。但是整体思路是通畅的,基本上可以确定这条路走通了。
最终导入逻辑
- 在写文章页面点击扩展程序,选择并读取模版内容;
- 自动调用update接口和text_correction接口;
- 在httpbody的mark_content中传入模版内容;
- 接口调用成功后自动刷新当前页面;
- 文章内容更新,导入文章模版成功;
经过最终的测试验证,我实现了文章内容的更新。虽然还存在一些小的问题,但是可喜可贺,有了实质进展。我会抽时间尽快完成这个增强扩展的开发工作,然后把源码开源,并且发一篇文章详细讲述整个开发过程以及遇到的问题。
总结
- 做程序员,千万不能轴,不要钻牛角尖;
- 要破局,不仅需要破局的能力,还要有破局的身体和精神状态;
- 要了解从前端项目开发,到项目编译导出,再到部署发布所有的流程和相关知识;
- 熟练掌握前端开发知识,各种调试技巧和相关工具的基本原理;
PS:如果有需要补充的内容,请在评论区留言
转载时请注明"来自掘金 - EvenZhu"