😺我开发了一个Chrome插件,可以在掘金官网里撸猫!还可以实时和铲屎官们聊天

简介: 掘金又弄这种整活儿的活动了~~我就喜欢整活儿!话不多说,先看效果~

需求


在掘金官网养一只喵拢共分几步?


  • 往掘金官网注入代码(chrome插件)


  • 网页里展示一只猫(live2d模型)


实现


Chrome插件开发


开发Chrome插件非常简单,我们手动创建这样一个配置文件


{
  "manifest_version": 2,
  "name": "掘金养猫",
  "version": "0.0.1",
  "description": "在稀土掘金社区撸猫并使用猫语实时聊天",
  "icons":
  {
    "16": "resources/icon16.png",
    "48": "resources/icon48.png",
    "128": "resources/icon128.png"
  },
  "content_scripts": 
  [
    {
      "matches": ["https://juejin.cn/*"],
      "js": ["js/index.js"],
      "run_at": "document_end"
    }
  ],
  "permissions":
  [
    "webRequest",
    "webRequestBlocking",
    "storage",
    "http://*/*",
    "https://*/*"
  ],
        "web_accessible_resources": ["js/live2d-mini.js"],
  "homepage_url": "https://github.com/ezshine/chrome-extension-catroom",
  "chrome_url_overrides":
  {
  }
}


这里面需要注意的是content_scripts字段里描述了我们要将js/index.js注入到哪些域名网页中,在本例里,我将js/index.js注入到所有juejin.cn开头的域名网页里。这个matches字段不支持正则,需要模糊匹配的部分用*号。


如果你想要在别的网页里撸猫,可自行修改matches字段,设置为<all_urls>可在所有网页里撸猫


另外,我们还需要向网页里注入一个live2d-mini.js的第三方库,content_scripts中要使用的插件本地资源,都需要在web_accessible_resources字段中注册。否则无法使用。


然后打开菜单更多工具>扩展程序选择加载已解压的扩展程序


image.png


选择这个配置文件所在的目录,然后就可以开始编写js/index.js的代码了。首先创建一个script标签,将live2d-mini.js动态的加载到网页中。


function injectCustomJs(jsPath,cb)
{
    var temp = document.createElement('script');
    temp.setAttribute('type', 'text/javascript');
    temp.src = chrome.extension.getURL(jsPath);
    temp.onload = function()
    {
        this.parentNode.removeChild(this);
        if(cb)cb();
    };
    document.head.appendChild(temp);
}
injectCustomJs('js/live2d-mini.js',function(){
    //加载成功后准备设置画布并显示猫咪模型
});


使用代码创建一个顶层canvas,作为用来显示猫咪的画布。


function setupCatPanel(){
        var canvas = document.createElement('canvas');
        canvas.id="live2d";
        canvas.width = 300;
        canvas.height = 400;
        canvas.style.width='150px';
        canvas.style.height='200px';
        canvas.style.position = "fixed";
        canvas.style.zIndex = 9999;
        canvas.style.right = 0;
        canvas.style.bottom = 0;
        canvas.style.pointerEvents='none';
        canvas.style.filter='drop-shadow(0px 10px 10px #ccc)';
        document.body.appendChild(canvas);
}


以下是完整代码


!function(){
    var cattype = "white";
    function setupCatPanel(){
        var canvas = document.createElement('canvas');
        canvas.id="live2d";
        canvas.width = 300;
        canvas.height = 400;
        canvas.style.width='150px';
        canvas.style.height='200px';
        canvas.style.position = "fixed";
        canvas.style.zIndex = 9999;
        canvas.style.right = 0;
        canvas.style.bottom = 0;
        canvas.style.pointerEvents='none';
        canvas.style.filter='drop-shadow(0px 10px 10px #ccc)';
        document.body.appendChild(canvas);
}
     function setupModel(){
        var _cattype = localStorage.getItem('cattype');
        if(_cattype)cattype=_cattype;
        var model_url= 'https://cdn.jsdelivr.net/gh/ezshine/chrome-extension-catroom/src/resources/'+cattype+'cat/model.json';
        var loadLive = document.createElement("script");
        loadLive.innerHTML = '!function(){loadlive2d("live2d", "' + model_url + '");}()';
        document.body.appendChild(loadLive);
    }
    function injectCustomJs(jsPath,cb)
    {
        var temp = document.createElement('script');
        temp.setAttribute('type', 'text/javascript');
        temp.src = chrome.extension.getURL(jsPath);
        temp.onload = function()
        {
            this.parentNode.removeChild(this);
            if(cb)cb();
        };
        document.head.appendChild(temp);
    }
    injectCustomJs('js/live2d-mini.js',function(){
      setupCatPanel();
      setupModel();
   });
}()


Live2D模型


live2d是非常流行的2d纸片人系统,在很多二次元老哥们的博客里被称作看板娘,社区里可以找到海量的live2d模型,本人收藏的模型/皮肤非常之多,live2d模型仓库可以找到一部分我整理好的。


所以当我看到这个征文题目时第一时间就想起了这两只猫的模型

无论黑猫,白猫。能博我欢心就是好喵~


想要橘猫,加菲猫?只要点赞和评论到位~嗯!


配合这个题目是不是太贴切了。


image.png


上述代码写完之后,在扩展程序里刷新一下这个插件就可以在掘金网页里愉快的撸猫啦~


image.png


就这?需求升级!


这样已经很有趣了,但还可以更有趣吗?比如,让所有安装了这个插件的人一起用喵星人的语言聊天呢?


想想就很有趣!干!继续拆解需求


  • 实时聊天系统


  • 喵语言加解密


实时聊天


这里我采用的技术方案,是上个礼拜刚从"前端从进阶到入院"里看到的一篇文章里提到的croquet


image.png


不用搭建服务器,引入一个js就可以实现实时聊天。并且这个库的能力远远不止于此,以后的项目里还要好好利用它。


这个聊天系统的搭建代码有点多,文章里就不贴了,但是这个库真的非常很好玩

强烈建议大家试试


喵语言加解密


聊天嘛,必然要谨慎处理文字内容,恰好想起曾经看到过一个兽语音译的小工具,可以将正常的文本加密为嗷呜啊这种兽语。


//https://roar.dreagonmon.top/
'我喜欢撸猫🐈' 加密后 ’~呜嗷呜啊嗷~嗷~呜嗷啊呜啊啊~~嗷~~啊呜嗷~嗷~呜嗷啊嗷呜啊呜呜~呜~呜嗷呜嗷~啊嗷呜~呜啊呜呜嗷呜呜呜呜啊啊嗷~啊‘


基于这个好玩的字符串加密算法,我修改成了猫星人的版本。聊天时的所有文字都会转换为喵语发送。需要手动解密,这样一来,文本在网上传输的时候非常安全,由浏览器端完成解密。


'你好' 加密后 '喵嗷嗷喵喵喵呜喵喵~呜嗷~呜~嗷嗷喵~'


image.png

相关文章
|
3月前
|
Web App开发 人工智能 IDE
从痛点到解决方案:为什么我开发了Chrome元素截图插件
传统的截图方式要么截取整个页面然后手动裁剪,要么使用浏览器自带的截图功能,但效果都不理想。特别是当内容包含SVG元素或复杂样式时,截图质量和速度、便捷性往往不尽如人意。
203 4
|
3月前
|
Web App开发 人工智能 前端开发
产品发布策略:如何让Chrome插件在竞争激烈的市场中脱颖而出
Chrome Web Store每天新增很多个插件。插件刚发布,用户只有我自己,如何在这样的红海市场中找到自己的位置,是我一直在思考的问题。
147 0
|
8月前
|
Web App开发 安全 iOS开发
基于PyCharm与Mac系统的Chrome历史记录清理工具开发实战
《基于PyCharm与Mac系统的Chrome历史记录清理工具开发实战》详细解析了如何在macOS下通过Python脚本自动化清理Chrome浏览器的历史记录。文章以`clear_chrome_history.py`为例,结合PyCharm开发环境,深入讲解技术实现。内容涵盖进程检测、文件清理、虚拟环境配置及断点调试技巧,并提供安全增强与跨平台适配建议。该工具不仅保障个人隐私,还适用于自动化运维场景,具备较高实用价值。
242 0
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
392 1
|
11月前
|
Web App开发 存储 开发者
Chrome 插件上架发布全流程指南
浏览器插件开发完以后,要发布到 Chrome Web Store上,也是需要颇费一番周折的,本文就从注册账号开始,一直到最后发布上架的全流程进行指导,希望帮助你提供一些经验,避免踩坑,耗时耗力。
1062 8
|
Web App开发 人工智能 自然语言处理
WebChat:开源的网页内容增强问答 AI 助手,基于 Chrome 扩展的最佳实践开发,支持自定义 API 和本地大模型
WebChat 是一个基于 Chrome 扩展开发的 AI 助手,能够帮助用户理解和分析当前网页的内容,支持自定义 API 和本地大模型。
1145 1
|
Web App开发 JSON JavaScript
vue学习:chrome 中 vuetools 开发插件 的下载、安装
这篇文章介绍了如何在Chrome浏览器中下载、安装并测试Vue.js开发插件——vue-devtools。
3339 0
vue学习:chrome 中 vuetools 开发插件 的下载、安装
|
Web App开发 数据采集 存储
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
本文探讨了如何利用Chrome DevTools Protocol (CDP) 与 Selenium WebDriver 提升浏览器自动化效率,结合代理IP技术高效采集微博数据。通过CDP,开发者可直接操作浏览器底层功能,如网络拦截、性能分析等,增强控制精度。示例代码展示了如何设置代理IP、cookie及user-agent来模拟真实用户行为,提高数据抓取成功率与稳定性。适用于需要频繁抓取互联网数据的应用场景。
1335 3
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
|
Web App开发 JSON 安全
Chrome浏览器的跨域问题
【10月更文挑战第6天】
2307 123