Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

迁移至Manifest Version 3 #85

Open
CodFrm opened this issue Jul 21, 2022 · 20 comments
Open

迁移至Manifest Version 3 #85

CodFrm opened this issue Jul 21, 2022 · 20 comments

Comments

@CodFrm
Copy link
Member

CodFrm commented Jul 21, 2022

阻碍

后台脚本/定时脚本

由于MV3将background修改为了service worker,该项修改直接导致了无法在background的sandbox中运行后台脚本,可能需要等待该提案实现:w3c/webextensions#170https://docs.google.com/document/d/1b-I-vXq2h7OFFmus78jZXIWcKilKJLKLeGplnY9wt7k/edit#heading=h.snjc0asv87ou,但啥时候实现,也不太清楚,实现之后也得有一段时间的过渡期

service worker中无法使用setTimeout等方法,直接导致cron包无法使用,但chrome也提出了chrome.alarms,实现起来可能比较麻烦

不支持sandbox的问题比较致命,但为了长期的发展,长痛不如短痛0.10.0将重构支持MV3,对于后台脚本的问题可能使用打开新窗口的方式暂时实现,等offscreen documents提案实现后再迁移(但也不确定能不能支持我们后台脚本的需求)

MV3还有不少有利的提案还在处理中,等到完全停止时也还有一段时间,并且完全停止后也还需要一段过渡时间,国内浏览器与其他厂商的态度也不一,脚本猫继续使用MV2进行开发,开发过程中注意MV3的某些特性吧(例如service worker)

油猴脚本

service worker中不支持URL.createObjectURL,可能会导致GM_xhr方法无法获取二进制之类的内容


上述是准备重构时发现的问题,后续继续补充


计划时间:

脚本站后端重构完成之后,预计2023年中旬

@CodFrm CodFrm pinned this issue Jul 24, 2022
@SSmJaE
Copy link
Member

SSmJaE commented Mar 24, 2023

👍

@CodFrm
Copy link
Member Author

CodFrm commented Jun 15, 2023

mv3中的脚本猫后台脚本可行性验证:
cookbook.offscreen-dom.zip

但是改动实在太多了,GM API也不确定能不能全实现,而且没动力,mv3重构计划等Google的ddl再说

@CodFrm
Copy link
Member Author

CodFrm commented Jun 19, 2023

@CodFrm
Copy link
Member Author

CodFrm commented Jul 3, 2023

GM_xmlhttpRequest 实现问题:w3c/webextensions#176

@Xdy1579883916
Copy link

你好, 此计划有新进展吗?

@CodFrm
Copy link
Member Author

CodFrm commented May 17, 2024

@Xdy1579883916 哈哈哈,最近没进展,方案调研了,准备写篇blog,再开始重构,但是最近沉迷其它事情去了

看公告,2025年6月会完全停掉mv2,还有点时间(

@Xdy1579883916
Copy link

Xdy1579883916 commented May 17, 2024

@CodFrm 我对脚本管理插件很感兴趣,测试版油猴v3已经支持了,奈何不开源,暴力猴作者目前也在规划,偶然发现还有脚本猫。最近在读开发指南和一些主站的开发文档,只能说相见恨晚,不然高低少走些弯路:事件、fetch、xhr劫持,监听某一元素出现等等…

油中源码我粗略看了看,不得不说挺Java的

大佬,很期待你的blog,写了希望可以踢我一脚。

另外,新版本v3计划是v2和v3都兼容还是其他?

@CodFrm
Copy link
Member Author

CodFrm commented May 18, 2024

@Xdy1579883916 看了一下,没想到tampermonkey这么快已经迁移到了mv3,不过商城还没审核通过,我觉得mv3有些功能应该是无法实现了的,不知道tampermonkey会如何处理。

image

前几天写了一段,然后又去做其它事情了,等完全写完,我会发布在我的blog上,到时候和哥哥说,我也不保证完全正确,有些问题还得真正开发起来才知道,不过我也会记录下来。

油中源码是指的什么?不过我没有怎么使用过java😂

新版本的v3计划,是先发布beta版本(一直有,但是因为mv2的缘故无法上架商城),正式版本依旧v2,期间只对v2版本作一些bug修复,等v3版本稳定后正式版迁移到v3版本。

可以从更新日志中看到脚本猫的一个发版路线:https://docs.scriptcat.org/docs/change/

@Xdy1579883916
Copy link

@CodFrm hello 一之,我来催更了,这两周有新进展吗?

@CodFrm
Copy link
Member Author

CodFrm commented May 30, 2024

@Xdy1579883916 呜呜呜 没有进展,最近在忙其它的事情,GitHub都没几个提交呢😭

这周或者下周我努努力

@CodFrm
Copy link
Member Author

CodFrm commented Jun 3, 2024

@Xdy1579883916 https://blog.icodef.com/dev/frontend/scriptcat-mv3 不知道哥哥有什么其它想了解的和意见,后续就准备进入mv3的重构开发了

@Xdy1579883916
Copy link

@CodFrm 一之你好,最近我看到一个简约的脚本管理,有一点共鸣,发个repo给你看看。

您的文档我看了,有点疑问和建议:

1、我不太确定background是否可以操作dom

image

2、我司的插件升级v3比较早,xhr我们是该用fetch了,GM_xhr 的 blob数据可以考虑base64方案。
3、GM_xhr/GM_download 依赖的 URL.createObjectURL会有影响,可以放到 contentjs里面创建出链接再下载。在用户页面创建的链接背景脚本也是可以访问的。

image

4、文档是这么说的,但是创建动态规则,用完就删掉也行.....

image

5、我们目前是用的这个方案,确实不优雅,但是能实现,请求之前检查头信息,需要设置就创建一条动态规则,请求完了删掉规则

image

image

image

6、usercripts 可以看看我推荐你的那个repo,写的还不错。

一之,加油啊,这个任务很艰巨

@CodFrm
Copy link
Member Author

CodFrm commented Jun 3, 2024

简单看了一下这个eternity,还是有些参考价值的,和我一样使用的是dexie这个库管理数据库,不过他没有实现GM API,只是使用了chrome.userScripts API,可以运行脚本,https://github.com/BlackGlory/eternity/blob/master/src/utils/user-script.ts#L27。

我认为油猴脚本的精髓全在GM API上了,可以让脚本像浏览器扩展一样拥有更大的权限。

我不太确定background是否可以操作dom

可以的,background.html是可以的,js我不太记得了,目前后台脚本实现就是在background里放了一个iframe进行操作,或许我表达得有误解,只是操作background自身页面的DOM,通过这个DOM可以实现一些GM API的功能,设置剪贴板好像就是依赖的DOM

image

我司的插件升级v3比较早,xhr我们是该用fetch了,GM_xhr 的 blob数据可以考虑base64方案。

是只能使用fetch了,blob的数据目前我不知道能不能通过chrome.offscreen去实现,实在不行也只能base64了,但是这在数据较大的情况下,有很多问题

GM_xhr/GM_download 依赖的 URL.createObjectURL会有影响,可以放到 contentjs里面创建出链接再下载。在用户页面创建的链接背景脚本也是可以访问的。

放到 contentjs里面创建出链接再下载,问题是如何放,还是需要从扩展层传过去的,可能方案和上述的还是差不多

DNR的问题

条数限制那个,仅作吐槽。

header那些还真是这么搞么。。。太脏了,tampermonkey的我还没研究,希望能找到一个比较优雅点的办法


整体下来工作量很大,主要是很多方案又得重新设计,整个架构怕也得调整,望着头大😵‍💫

哥哥也是做这类型扩展的么?可以多多交流😋

@Xdy1579883916
Copy link

有这方面的兴趣啦,感觉这是个很棒的事情,有机会可以参与贡献☺️

@CodFrm
Copy link
Member Author

CodFrm commented Jun 3, 2024

@Xdy1579883916 可以,非常欢迎👏

@leic4u
Copy link

leic4u commented Jun 26, 2024

加油,期待 manifest v3 新版本🥰🥰🥰

@Xdy1579883916
Copy link

@CodFrm 我的插件搞完了,最近维护完,基本稳定了,来捧捧场

chrome webstore: https://chromewebstore.google.com/detail/%E9%A6%99%E8%8D%89%E5%B8%83%E4%B8%81%F0%9F%8C%BF%F0%9F%8D%AE/fencadnndhdeggodopebjgdfdlhcimfk

github:
https://github.com/Xdy1579883916/vanilla-pudding

@CodFrm
Copy link
Member Author

CodFrm commented Jul 3, 2024

@Xdy1579883916 哥哥执行力真强,这么快就完成了

@Xdy1579883916
Copy link

Xdy1579883916 commented Jul 3, 2024

@Xdy1579883916 哥哥执行力真强,这么快就完成了

不一样的 一之,我的插件没有 GM API,不需要处理复杂的脚本依赖存储、以及脚本安全相关

@CodFrm
Copy link
Member Author

CodFrm commented Jul 3, 2024

@Xdy1579883916 也很厉害了,我还没怎么动😭,近期还打算修修bug,mv2继续跑跑

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Todo
Development

No branches or pull requests

4 participants