我想给掘金开发一个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"
相关推荐
秦老师Q2 小时前
「Chromeg谷歌浏览器/Edge浏览器」篡改猴Tempermongkey插件的安装与使用
前端·chrome·edge
滴水可藏海2 小时前
Chrome离线安装包下载
前端·chrome
Mr_Xuhhh7 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
木古古1817 小时前
使用chrome 访问虚拟机Apache2 的默认页面,出现了ERR_ADDRESS_UNREACHABLE这个鸟问题
前端·chrome·apache
徐浪老师1 天前
深入实践 Shell 脚本编程:高效自动化操作指南
运维·chrome·自动化
Dklau-c1 天前
Linux下,修改环境变量的几种方法
linux·前端·chrome
Black蜡笔小新3 天前
无插件H5播放器EasyPlayer.js RTSP播放器chrome/edge等浏览器如何使用独立显卡
javascript·chrome·edge
gqkmiss3 天前
Chrome 浏览器 131 版本新特性
前端·chrome·浏览器·chrome 131
a1denzzz3 天前
shell编程规范和脚本变量
前端·chrome
Vzhangs3 天前
解决Windows + Chrome 使用Blob下载大文件时,部分情况下报错net:ERR_FAILED 200 (OK)的问题
前端·chrome·windows