探讨脚本注入 SC为何不及TM快 #988
Replies: 5 comments 4 replies
|
另外说一下TM/SC的注入方式: TM 有两种情况,一种是
首先是默认的配置:
你文中的是 manifest.json 的内容? "content_scripts": [],
"user_scripts": {
"api_script": "content.js"
},我没有找到 user_scripts 这个字段(这就是你说的非API模式?):https://developer.chrome.com/docs/extensions/reference/manifest/content-scripts?hl=zh-cn 而且我添加上,只得到了一个错误:
基于上述描述,我觉得你说的内容有问题 |
|
我尝试在 edge://serviceworker-internals/?devtools 手动停掉 SW,这时候 SC会比TM慢,但是TM的SW我停掉后,马上又会恢复,无法验证 然后我又测试了一下冷启动(重启浏览器),TM甚至比SC的 document-end 还慢,可以看到 run TM 是在 SC 的
|
|
在 example.com 测加载速度完全无意义吧,站点本身毫无脚本加载,你甚至会发现document.addEventListener("readystatechange",...)在反复刷新时,都会出现事件错误,因为页面加载得太快了。 至少也是 content-security-policy.com 这种有网站自身脚本加载的站点来测试。 |
|
@CodFrm envInfo: {
sandboxMode: "raw",
isIncognito: chrome.extension?.inIncognitoContext ?? undefined,
userAgentData: this.userAgentData ?? undefined,
} as GMInfoEnv,我在想,假如是 scripting 的话,是不是不用等 pageLoad 就能取得 isIncognito 跟 userAgentData 如果 envInfo 不用等 pageLoad |






Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
1)TM 是全域注入
content.js, 而不是ScriptCat 用 API 注入 (虽然注入后都是一个全域脚本)2)API 注入的全域比非API注入较慢
3)TM 不使用
inject.js, 而是在content.js绕过CSP注入一次性代码因此在TM,它用最快的
content.js, 直接接入到 content 环境,然后把脚本以 <script> 绕过CSP 注入到网页环境可是SC,首先
content.js和inject.js都要注入,还要跟其他几百个脚本一起排队。不是排最头的话,前面的小鸡就要等后面的母鸡和公鸡载入后才能正常运行。
因为TM用的是非API注入,所以用链结打开浏览器时必会执行。
而SC用的是API注入。在浏览器刚打开时,
service_worker还是非活跃状态。要等到Chrome API 事件触发后才唤醒。唤醒后才去检查一下有没有未注册好的脚本,有的话就注册一下那些动作。
All reactions