我想给掘金开发一个Chrome增强扩展

背景

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"
相关推荐
微wx笑21 小时前
chrome扩展程序如何实现国际化
前端·chrome
CUIYD_198921 小时前
Chrome 浏览器(版本号49之后)‌解决跨域问题
前端·chrome
Dontla1 天前
华为昇腾服务器(固件版本查询、驱动版本查询、CANN版本查询)
运维·服务器·chrome
JsenLong1 天前
ubuntu 守护进程
linux·chrome·ubuntu
前端大全1 天前
Chrome 推出全新的 DOM API,彻底革新 DOM 操作!
前端·chrome
林的快手2 天前
CSS文本属性
前端·javascript·css·chrome·node.js·css3·html5
码农君莫笑2 天前
Linux系统上同时打印到物理打印机并生成PDF副本方法研究
linux·前端·chrome·打印·信管通
代码轨迹2 天前
青龙面板运行selenium启动Chrome报错
chrome·python·selenium
三月七(爱看动漫的程序员)2 天前
与本地电脑PDF文档对话的PDF问答程序
前端·人工智能·chrome·gpt·搜索引擎·pdf·知识图谱
码界领航2 天前
【2025最新版】Chrome谷歌浏览器如何能恢复到之前的旧版本
前端·chrome