用 CodeBuddy 造自动刷新插件,手速快到连 F5 键都怀疑人生!

举报
Undoom 发表于 2025/05/25 13:09:06 2025/05/25
【摘要】 2.用 CodeBuddy 造自动刷新插件,手速快到连 F5 键都怀疑人生!本文所使用的 CodeBuddy 免费下载链接:前言为什么我要开发这款浏览器自动刷新插件?作为一名前端开发者,我每天都要面对这样的场景:修改一行 CSS 代码,切换到浏览器,按下 F5 刷新,发现效果不理想,再回到编辑器修改,重复刷新... 一天下来, 手动刷新浏览 器的次数可能超过 200 次,浪费的时间足够喝三杯...

2.用 CodeBuddy 造自动刷新插件,手速快到连 F5 键都怀疑人生!

本文所使用的 CodeBuddy 免费下载链接:

前言

为什么我要开发这款浏览器自动刷新插件?

作为一名前端开发者,我每天都要面对这样的场景:修改一行 CSS 代码,切换到浏览器,

按下 F5 刷新,发现效果不理想,再回到编辑器修改,重复刷新... 一天下来, 手动刷新浏览 器的次数可能超过 200 次,浪费的时间足够喝三杯咖啡。

更让人崩溃的是:

调试 JavaScript 时:每次刷新都会重置断点,我不得不重新设置,反复调试同一个问 题

。多设备测试:在手机、平板和电脑上逐一刷新查看响应式效果,手指都按酸了 团队协作:同事提交代码后,我需要手动刷新才能看到更新,沟通成本增加


我受够了这种低效的工作方式!于是决定开发这款自动刷新插件,它能:

监听文件变化:保存代码后立即刷新浏览器,无需手动操作

支持多设备同步:一次修改,所有设备同时更新

。 保持调试状态:刷新时保留断点和变量值,提升调试效率

自定义刷新规则:只监听关键文件,避免不必要的刷新

如果你也受够了手动刷新的折磨,这款插件将为你节省:

。每天至少 30 分钟的重复操作时间

。减少 80% 的上下文切换,保持编码流畅性 。 降低调试难度,让你专注于解决真正的问题

现在,我再也不用为刷新浏览器而分心,工作效率提升了一大截!

你是否也遇到过这些痛点?

。 内容编辑时频繁刷新后台查看效果

。 监控数据看板时错过关键变化 。 团队开发中代码更新不同步

测试时忘记刷新导致误判

如果答案是肯定的,这款插件将成为你的生产力神器!

如何使用CodeBuddy完成一系列的流程操作

CodeBuddy 提供了插件开发的模板和脚手架 ,一键生成标准的 Manifest 文件、目录结构, 甚至内置了基本的功能模块。这让我节省了数小时的初始化工作,直接专注于核心功能开 发。 当我需要实现浏览器标签监听、文件系统监控等功能时, CodeBuddy 能根据上下文提 供精准的代码建议,甚至生成完整的功能模块。例如:

。 自动生成 Chrome API 调用示例 。 提供跨浏览器兼容的实现方案

给出异步操作的安全处理模式 在chat模式让v3帮我们生成对应项目的readme文件,以 便后面直接将readme保存在craft模式进行使用操作


下面是CodeBuddy生成出来的,直接点击右下角的复制保存在我们创建的README文 件里面就行了,如果这里能直接帮我们创建README文件的话就更方便了,这里可以 发现CodeBuddy生成的项目解释说明真的很详细,他考虑到了小数时间,并且可视化 界面显示剩余的刷新次数,精准次数,真的很不错,并且在特性那一块还有小图标



这份由 Codebuddy 生成的《谷歌浏览器自动刷新插件 - Auto Refresh Plus》README 文件超厉害!内容十分全面,功能概述简洁明了, 一下就把插件能做什么讲清楚了。主 要特性罗列得清晰直观,让人一眼就能 get 到亮点。安装指南和使用说明步骤详细,就 算是技术小白也能轻松上手操作。注意事项考虑周到,常见问题解答实用,更新日志也 有条理,反馈渠道也给安排上了。整体结构清晰,逻辑连贯,可读性强,对使用者和开 发者都很友好,是一份高质量的 README 文件!

下面我们直接打开Craft模式让他进行分析解释文件进行程序的生成操作 我们这里@上刚刚 的文件


他会进行文件创建的分析以及向我们进行询问操作


他依次对每个文件进行生成操作,每个文件的对应功能 在文件生成结束之后,他甚至还在 对之前的README文件进行修改的操作,优化里面的内容







一个流程下来,只消耗了一个次数,就直接把插件文件给生成出来了 接下来我们就测试下 效果是否好

我们打开谷歌插件,打开拓展选择管理拓展程序


选择加载已经解压的拓展程序,就是我们刚刚存放代码的文件夹

这里显示无法加载,我们直接将报错复制给CodeBuddy就行了,如果CodeBuddy能获取粘


贴的图片里面的信息就好了,那样问题会更容易被解决的

未能成功加载扩展程序 文件 D:..代码提交\CodeLink\CodeBuddy谷歌刷新界面插件 错 误 Could not load icon 'images/icon16.png' specified in 'action'. 无法加载清单。 这个报 错是什么意思?请帮我解决

这里他反馈的是图标文件夹里面没有图标,他现在对几种不同尺寸的图标文件进行创建生 成


这里处理完了报错之后他还贴心的教我们如何去使用这个插件




OK了,这次我们按照上面原来的步骤进行拓展程序的解压操作,这次我们成功读取到了文 件夹里面的内容了

这里我们可以看到相关的信息,内存大小才1MB不到,网页运行的时候完全没啥压力


接下来我们就进行文章的测试操作 我们点击拓展里面的第一个插件Auto Refresh Plus



然后他会跳出来一个可视化界面 我们可以分析下界面,可以设置刷新的间隔以及上下调整 的图标,以及我们需要刷新的总次数 还有我们目标的剩余次数和状态








































我们运行了下, 发现确实可以进行页面的刷新,但是好像新开一个页面,他还是在刷新老页面,我想着估 计的缓存的问题

我们再让CodeBuddy改下

确实可以进行页面的刷新,但是好像新开一个页面,他还是在刷新老页面,我想要的是 只要进行重置的操作之后,就重新定位刷新的页面


输入要求之后他根据需求进行代码的更改操作 这里我还发现更改代码的时候还会对比修改 前后的状况,这个还是比较细致的



这里等了一会儿就好了







这里不仅对原代码进行修改了,还进行了各种优化操作 这里我们继续测试下


我们切换到哪个网站他就刷新哪个网站,到这里我们通过三轮对话,到这里确实达到了我 们要求了


² 存储刷新状态


let refreshState = {


timer: null ,


tabId: null ,


interval: 5ΘΘΘ ,


maxCount: 1Θ ,


currentCount: Θ


} ;





² 监听来自popup的消息


chrome .runtime .onMessage .addListener((message , sender , sendResponse) =¬ {




switch (message .action) {


case ISTART_REFRESH I :


startRefresh(message .data);


break;


case IPAUSE_REFRESH I :


pauseRefresh();


break;


case IRESET I :


resetRefresh();


break;


}


}) ;





² 开始刷新


function startRefresh(data) {


² 清除可能存在的旧定时器


if (refreshState .timer) {


clearInterval(refreshState .timer);


}





² 更新状态


refreshState = {




… refreshState ,


tabId: data .tabId ,


interval: data .interval ,


maxCount: data .maxCount ,


currentCount: data .currentCount


} ;





² 设置新的定时器


refreshState .timer = setInterval(() =¬ {


² 检查标签页是否仍然存在


chrome .tabs .get(refreshState .tabId , (tab) =¬ {


if (chrome .runtime .lastError) {


² 标签页不存在,停止刷新


pauseRefresh();


return;


}





² 检查是否达到最大次数


if (refreshState .currentCount ≥ refreshState .maxCount) { pauseRefresh();

return;


}






² 刷新页面


chrome .tabs .reload(refreshState .tabId , {} , () =¬ { refreshState .currentCount艹 ;

² 通知popup更新计数


chrome .runtime .sendMessage({


action: I UPDATE_COUNT I ,


data: {


currentCount: refreshState .currentCount


}


}) ;


}) ;


}) ;


} , refreshState .interval);


}





² 暂停刷新


function pauseRefresh() {


if (refreshState .timer) {


clearInterval(refreshState .timer);


refreshState .timer = null;


}




}





² 重置刷新


function resetRefresh(data) {


pauseRefresh();


refreshState = {


… refreshState ,


currentCount: Θ ,


interval: 5ΘΘΘ ,


maxCount: 1Θ ,


tabId: data? tabId Ⅱ null


} ;


}





² 监听标签页激活事件


chrome .tabs .onActivated .addListener((activeInfo) =¬ { ² 如果正在刷新,则暂停刷新

if (refreshState .timer) {


pauseRefresh();


² 通知popup更新状态


chrome .runtime .sendMessage({


action: I UPDATE_COUNT I ,




data: {


currentCount: refreshState .currentCount


}


}) ;


}


}) ;





² 监听标签页关闭事件


chrome .tabs .onRemoved .addListener((tabId) =¬ {


if (tabId s refreshState .tabId) {


pauseRefresh();


² 通知popup更新状态


chrome .runtime .sendMessage({


action: I UPDATE_COUNT I ,


data: {


currentCount: refreshState .currentCount }

}) ;


}


}) ;



chrome .tabs .onUpdated .addListener((tabId , changeInfo , tab) =¬ { if (tabId s refreshState .tabId) {

if (changeInfo .status s Iloading I) {


² 页面开始加载,可以在这里更新状态


chrome .runtime .sendMessage({


action: I UPDATE_COUNT I ,


data: {


currentCount: refreshState .currentCount


}


}) ;


} else if (changeInfo .status s Icomplete I) {


² 页面加载完成


² 检查是否需要停止刷新


if (refreshState .currentCount ≥ refreshState .maxCount) { pauseRefresh();

chrome .runtime .sendMessage({


action: I UPDATE_COUNT I ,


data: {


currentCount: refreshState .currentCount


}


}) ;


}




}


}


}) ;





² 监听标签页替换事件


chrome .tabs .onReplaced .addListener((addedTabId , removedTabId) =¬ { if (removedTabId s refreshState .tabId) {

pauseRefresh();


² 通知popup更新状态


chrome .runtime .sendMessage({


action: I UPDATE_COUNT I ,


data: {


currentCount: refreshState .currentCount


}


}) ;


}


}) ;





² 错误处理函数


function handleError(error) {


console .error(I刷新过程中发生错误 : I , error);


pauseRefresh();




chrome .runtime .sendMessage({


action : I ERROR I ,


data: {


message: I刷新过程中发生错误 I ,


details: error .message


}


}) ;


}





² 处理浏览器启动时的状态恢复


chrome .runtime .onStartup .addListener(() =¬ {


² 清除之前的状态


chrome .storage .local .remove([ Istate I]) ;


}) ;






上面是部分的代码,具体的代码请移步到CodeBuddy 谷歌刷新界面插件 · 无爱如何释怀 / 小 设计 - 码云 - 开源中国

如果你也想开发一款高效的浏览器插件, CodeBuddy 绝对是你的得力助手!它让技术门槛 不再是阻碍,让创意快速变成现实。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。