Skip to content

修正本机档案拖拉安装时错误设置origin问题#1371

Merged
CodFrm merged 3 commits intomainfrom
fix/install-origin-wrong
Apr 25, 2026
Merged

修正本机档案拖拉安装时错误设置origin问题#1371
CodFrm merged 3 commits intomainfrom
fix/install-origin-wrong

Conversation

@cyfung1031
Copy link
Copy Markdown
Collaborator

@cyfung1031 cyfung1031 commented Apr 24, 2026

Checklist / 检查清单

  • Fixes mentioned issues / 修复已提及的问题
  • Code reviewed by human / 代码通过人工检查
  • Changes tested / 已完成测试

Description / 描述

自 2025.07.23 的 commit d9b0eee 起,
当进行本机拖拉安装等动作时
安装的脚本会设为假链结并长期储存在 chrome.storage.local

这导致每次更新出现 fetch error (误判为网址连结脚本)

如果最初安装是网上安装,然后手动安装了本地版本,origin会被改成假链结然后完全无法取得新更新

Screenshots / 截图


测试方法1

  • 手动拖拉一个新脚本,确认被视为本地脚本而非网址连结脚

测试方法2

  • 先安装一个脚本,然后下载把脚本改一下,在本地进行手动拖拉安装

@cyfung1031 cyfung1031 added P0 🚑 需要紧急处理的内容 hotfix 需要尽快更新到扩展商店 labels Apr 24, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

该 PR 旨在修正“本机档案拖拉安装/手动安装”场景下脚本 origin 被错误写成伪 file://... 链结、进而导致后续更新检查出现 fetch error 的问题;改动发生在 Service Worker 的脚本安装/更新主流程中(ScriptService.installScript),属于核心路径修复。

Changes:

  • 拖拉安装(本机档案)时将伪 file:///*from-local*/...origin/originDomain/downloadUrl/checkUpdateUrl 清空,以避免被误判为网址连结脚本并触发更新 fetch error。
  • 针对旧版本写入的异常 origin 前缀(file:///*from-local*/file://-/)做兼容清理。
  • 当脚本被“同一 creationtime 的本地版本”覆盖时,尝试保留最初网络安装的更新来源信息(用于后续更新检查)。

Comment on lines +419 to +425
// 处理 ScriptCat 旧版本进行安装时的 origin 错误 ( 1.0.0-beta.2 ~ 1.4.x - 自 commit d9b0eeede1a8b114f79a43fade99d825323c63f6 @ 2025.07.23 )
if (oldScript?.origin?.startsWith("file:///*from-local*/") || oldScript?.origin?.startsWith("file://-/")) {
oldScript.origin = "";
oldScript.originDomain = "";
oldScript.downloadUrl = "";
oldScript.checkUpdateUrl = "";
}
Copy link

Copilot AI Apr 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里对 oldScript 的 origin/downloadUrl/checkUpdateUrl 做“旧版本错误”清理是在后面才执行的,但 installScript 前面已经可能把 oldScript.origin 复制到 script(例如 subscribeUrl 分支)。如果 oldScript.origin 已经是错误的 file://-/...,就会被继续保存到新 script,导致本次修复失效。建议在任何读取/复制 oldScript.origin 之前先做统一的 origin 归一化,并且同样对 script.origin 处理 file://-/ 这种旧前缀。

Copilot uses AI. Check for mistakes.
if (oldScript && script.createtime === oldScript.createtime) {
// 如果最初是从网络安装,之后拖拉安装本机档案,则保留origin资讯。用于更新检查。
// 如果本机安装的版本号较低,则会在下次更新检查时提醒有更新。那个时候,用户可以选择更新至网络上最新版本,或忽略并保留本机版本
if (oldScript && oldScript.origin && !script.origin) {
Copy link

Copilot AI Apr 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

在 if (oldScript && script.createtime === oldScript.createtime) 这个块里,内部又重复判断了一次 oldScript(if (oldScript && oldScript.origin && !script.origin))。这里的 oldScript && 可以去掉,减少冗余并提升可读性。

Suggested change
if (oldScript && oldScript.origin && !script.origin) {
if (oldScript.origin && !script.origin) {

Copilot uses AI. Check for mistakes.
@CodFrm CodFrm merged commit 144dc25 into main Apr 25, 2026
3 of 4 checks passed
@CodFrm CodFrm deleted the fix/install-origin-wrong branch April 25, 2026 04:36
@cyfung1031
Copy link
Copy Markdown
Collaborator Author

@CodFrm 你这样改不是我的原意。。。

oldScript的错误还一直存在。。

@CodFrm
Copy link
Copy Markdown
Member

CodFrm commented Apr 25, 2026

@CodFrm 你这样改不是我的原意。。。

oldScript的错误还一直存在。。

哪里存在? oldScript 正常才会进入下一步

@cyfung1031
Copy link
Copy Markdown
Collaborator Author

@CodFrm 你这样改不是我的原意。。。
oldScript的错误还一直存在。。

哪里存在? oldScript 正常才会进入下一步

我指的是 原本以 file:///*from-local*/安装的脚本

因为我有

    if (oldScript?.origin?.startsWith("file:///*from-local*/") || oldScript?.origin?.startsWith("file://-/")) {
      oldScript.origin = "";
      oldScript.originDomain = "";
      oldScript.downloadUrl = "";
      oldScript.checkUpdateUrl = "";
    }

这个写法

跟你改掉后的逻辑是两回事

@cyfung1031
Copy link
Copy Markdown
Collaborator Author

    if (oldScript?.origin?.startsWith("file:///*from-local*/") || oldScript?.origin?.startsWith("file://-/")) {
      oldScript.origin = "";
      oldScript.originDomain = "";
      oldScript.downloadUrl = "";
      oldScript.checkUpdateUrl = "";
    }
    if (oldScript && script.createtime === oldScript.createtime) {
      if (oldScript && oldScript.origin && !script.origin) {
        script.origin = oldScript.origin;
        script.originDomain = oldScript.originDomain;
        script.downloadUrl = oldScript.downloadUrl;
        script.checkUpdateUrl = oldScript.checkUpdateUrl;
      }
    }

    if (
      oldScript &&
      script.createtime === oldScript.createtime &&
      oldScript.origin &&
      !script.origin &&
      !oldScript.origin.startsWith("file:///*from-local*/") &&
      !oldScript.origin.startsWith("file://-/")
    ) {
      script.origin = oldScript.origin;
      script.originDomain = oldScript.originDomain;
      script.downloadUrl = oldScript.downloadUrl;
      script.checkUpdateUrl = oldScript.checkUpdateUrl;
    }

是不一样的

@cyfung1031
Copy link
Copy Markdown
Collaborator Author

呀。
我搞错了。我原本那个也不太行

算了。没事

先这样

@CodFrm
Copy link
Copy Markdown
Member

CodFrm commented Apr 25, 2026

    if (oldScript?.origin?.startsWith("file:///*from-local*/") || oldScript?.origin?.startsWith("file://-/")) {
      oldScript.origin = "";
      oldScript.originDomain = "";
      oldScript.downloadUrl = "";
      oldScript.checkUpdateUrl = "";
    }
    if (oldScript && script.createtime === oldScript.createtime) {
      if (oldScript && oldScript.origin && !script.origin) {
        script.origin = oldScript.origin;
        script.originDomain = oldScript.originDomain;
        script.downloadUrl = oldScript.downloadUrl;
        script.checkUpdateUrl = oldScript.checkUpdateUrl;
      }
    }

    if (
      oldScript &&
      script.createtime === oldScript.createtime &&
      oldScript.origin &&
      !script.origin &&
      !oldScript.origin.startsWith("file:///*from-local*/") &&
      !oldScript.origin.startsWith("file://-/")
    ) {
      script.origin = oldScript.origin;
      script.originDomain = oldScript.originDomain;
      script.downloadUrl = oldScript.downloadUrl;
      script.checkUpdateUrl = oldScript.checkUpdateUrl;
    }

是不一样的

好像是,我撤回处理一下

@CodFrm
Copy link
Copy Markdown
Member

CodFrm commented Apr 25, 2026

呀。 我搞错了。我原本那个也不太行

算了。没事

先这样

说实话,这个逻辑我也看了好一会儿才理解,应该是想创建的时候 如果是 file 的就清空掉,但是如果oldScript不是file,那就记录下来,恢复成oldScript的,这样理解的话,我后面改的似乎也没问题,不需要在前面再清空oldScript的(这样似乎反而会产生问题)

感觉依赖AI有点太过了,这些细节内容脑子有点退化

@cyfung1031
Copy link
Copy Markdown
Collaborator Author

呀。 我搞错了。我原本那个也不太行
算了。没事
先这样

说实话,这个逻辑我也看了好一会儿才理解,应该是想创建的时候 如果是 file 的就清空掉,但是如果oldScript不是file,那就记录下来,恢复成oldScript的,这样理解的话,我后面改的似乎也没问题,不需要在前面再清空oldScript的(这样似乎反而会产生问题)

感觉依赖AI有点太过了,这些细节内容脑子有点退化

改回我之前那个是好理解一点
现在main那个有点难理解

@CodFrm
Copy link
Copy Markdown
Member

CodFrm commented Apr 25, 2026

呀。 我搞错了。我原本那个也不太行
算了。没事
先这样

说实话,这个逻辑我也看了好一会儿才理解,应该是想创建的时候 如果是 file 的就清空掉,但是如果oldScript不是file,那就记录下来,恢复成oldScript的,这样理解的话,我后面改的似乎也没问题,不需要在前面再清空oldScript的(这样似乎反而会产生问题)
感觉依赖AI有点太过了,这些细节内容脑子有点退化

改回我之前那个是好理解一点 现在main那个有点难理解

业务逻辑没问题,就先这样

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

hotfix 需要尽快更新到扩展商店 P0 🚑 需要紧急处理的内容

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants