我做了一个掘金插件(浏览器插件):借助掘金的能力, 免费打造个人顶级图床

图床

相信对于写博客的开发者们来说, 图床是一个非常非常刚需的东西。 如果有钱的同学可以可以去阿里云或者七牛云等站点, 借助他们的云能力构建自己的图床;

但是想免费白嫖的同学呢, 想免费的同学怎么办?

网上有很多通过 gitee 来做静态资源图床的, 也有通过 PicGo+GitHub+jsDeliver 来搭建的。 但是在国内, 感觉都不是可取之道。 首先 gitee 的资源没有 CDN 加速, 非常非常的慢, github + jsDeliver 虽然有 CDN 加速了, 但是他们 cdn 站点是在国外,所以也非常非常的慢, 有没有 CDN 甚至都没有感觉。

那有没有白嫖的, 速度又超级快的呢?

当然有, 而且还是免费且非常快的。 就是掘金静态资源图!它能帮我们自动处理图片压缩, 图片质量处理, 图片 CDN 等, 能力非常强大, 加载速度更加是快的离谱!

我这儿举一个简单的例子:

这些图片初次加载, 最大的图片, 500 多kb, 只需要 140ms ;如果 有 CDN 缓存之后呢?

是的, 只需要 3ms , 是不是很惊喜, 很意外!

这就是强大的掘金静态资源图片的能力。

我作为小白咋使用呢?

我这儿给一个小白来个指引几步走:

  1. 注册一个掘金账号

这个没有啥好说的, 直接略过吧。

  1. 创建一个掘金文档草稿, 随便取名字就可以

在掘金作者中心写文章:

然后随便取一个名字, 退出即可, 就可以保存为一个草稿

  1. 这个时候就喜提一个图床文档了

比如我们有啥看上的图片, 复制粘贴到文档里面, 它就自动上传生成一个图片 CDN 图片链接: 比如这样操作

而且还可以自己上传本地文件, 这里就不做演示了。

我做了一个插件, 借助掘金的能力搭建个人顶级图床

上面的流程使用静态图片也是非常流畅和好使的。 但是也有一定的痛点问题: 比如我们每次需要保存新图片的时候, 就需要去登陆掘金, 然后找到我的草稿, 然后复制粘贴;再比如我图片太多了, 我想找到我想要的图片是一件很困难的事情。

所以现在进入我们的主题了。 有没有一个办法, 能够非常方便的保存我的静态图片, 有没有一种办法, 能够让我非常轻松的预览我所有保存的图片; 我甚至有好几个图库草稿, 能不能快速来回切换呢?

基于上面的需求,我就搭建了一个插件工具来解决上面的问题:

先来看看插件效果

先俩看看使用效果吧:图库的图片, 都可以使用 瀑布流的方式来预览, 这样可以非常方方面的找到我的图片, 支持复制、预览、下载, 就像这样子:

其中如果遇到自己想要的图片了,直接可以换出图库链接, 直接保存即可。

如果是初次使用:

需要自己去添加图库的草稿链接

快速保存图片

在插件的这个地方, 换起来之后, 会有自己保存的图床链接, 直接点就可以到自己的图床草稿了, 然后复制粘贴图片即可。

大概就是这样子的功能吧。 更多的功能, 有兴趣的同学们自己探索一下吧。 当然有BUG 或者有 想法的同学, 请联系作者

咋使用

按照以下步骤来即可

  1. 访问代码源码
  1. 下载代码
  2. 解压 dist.zip 文件, 然后将解压后的文件,将产物目录导入到浏览器扩展程序页面即可(【添加已解压的扩展程序】)。

用到了哪些技术

作为开发同学,我们来梳理一下用到的技术, 当然不会做细节代码展示分析, 有兴趣的同学可以直接去看源码即可。

用到的最核心技术点, 就是我们如何去获取草稿里面的链接

思路1:最开始想法是, 直接在插件 background service worker 里面去请求掘金的草稿接口, 结果直接踩坑第一步:掘金权限做的太好了, 直接会因为不同的 Origin 直接拦截请求下来。 当然借助服务端的能力可以越过这个, 插件里面使用服务端能力, 岂不是我的 cookie 都有可能被传走? 所以此法果断放弃。

思路2: 使用浏览器扩展程序能力, 去动态创建一个掘金图床草稿页面的页签, 然后通过 content script 注入脚本的能力, 在掘金草稿的页面去请求草稿接口, 拿到草稿的数据在给我 background wervice worker 。 还是失败了, 因为掘金的鉴权能力实在是太牛逼了, 因为我没有办法越过他们的 csrf_token 检查, 我没有办法获取实时的 token。 就导致了, 该方法可能现在好使, 第二天就接口挂了。

思路3:让插件去做爬虫。 也是通过插件去创建掘金图床草稿页面的页签, 然后等待掘金本身去请求草稿, 请求回来之后, 等待渲染完成, 然后直接爬取 html 脚本即可。

技术

  1. 通过 chrome.storage.local 去存取储用户保存掘金图床草稿链接;

  2. 使用 chrome.runtime.sendMessage 去做 html <--> service worker 的通信

  3. 使用 chrome.webRequest.onCompleted 监听请求是否完成

  4. 使用 chrome.scripting.executeScript 对页面页签进行脚本注入

  5. 使用 bricks.js 做图片瀑布流;

彩蛋

插件里面, 还有两个功能, 一个是开启掘金阅读模式 , 还有一个是 支持复制当前文章为 Markdown

可以看下面两个文章:

相关推荐
醉の虾10 分钟前
Vue3 使用v-for 渲染列表数据后更新
前端·javascript·vue.js
张小小大智慧19 分钟前
TypeScript 的发展与基本语法
前端·javascript·typescript
hummhumm28 分钟前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j
asleep70141 分钟前
第8章利用CSS制作导航菜单
前端·css
hummhumm1 小时前
第 28 章 - Go语言 Web 开发入门
java·开发语言·前端·python·sql·golang·前端框架
幼儿园的小霸王1 小时前
通过socket设置版本更新提示
前端·vue.js·webpack·typescript·前端框架·anti-design-vue
疯狂的沙粒1 小时前
对 TypeScript 中高级类型的理解?应该在哪些方面可以更好的使用!
前端·javascript·typescript
gqkmiss2 小时前
Chrome 浏览器 131 版本开发者工具(DevTools)更新内容
前端·chrome·浏览器·chrome devtools
Summer不秃2 小时前
Flutter之使用mqtt进行连接和信息传输的使用案例
前端·flutter
旭日猎鹰2 小时前
Flutter踩坑记录(二)-- GestureDetector+Expanded点击无效果
前端·javascript·flutter