Skip to content

Commit e635911

Browse files
CodFrmcyfung1031
andauthored
🐛 删除清理逻辑和优化checkuserscript逻辑 (#1113)
* 删除清理逻辑和优化checkuserscript逻辑 * 重新加载按钮 * 代码调整 * 处理warningMessageHTML * 代码调整 * 代码调整 * 代码调整 * 代码调整 * 根据作者要求退回 * 根据作者要求退回 * translation fix * 代码调整 * Update index.tsx * Chrome "Allow User Scripts" 后自动重启 --------- Co-authored-by: cyfung1031 <44498510+cyfung1031@users.noreply.github.com>
1 parent d3ffedc commit e635911

File tree

10 files changed

+88
-44
lines changed

10 files changed

+88
-44
lines changed

src/app/service/service_worker/runtime.ts

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,6 @@ import { CompiledResourceDAO } from "@App/app/repo/resource";
5151
import { setOnTabURLChanged } from "./url_monitor";
5252
import { scriptToMenu, type TPopupPageLoadInfo } from "./popup_scriptmenu";
5353

54-
// 避免使用版本号控制导致代码理解混乱
55-
// 用来清除 UserScript API 里的旧缓存
56-
const USERSCRIPTS_REGISTER_CONTROL = "a5564f38-d9b3-43d0-8520-3a2950d6a61d";
57-
5854
const ORIGINAL_URLMATCH_SUFFIX = "{ORIGINAL}"; // 用于标记原始URLPatterns的后缀
5955

6056
const runtimeGlobal = {
@@ -260,21 +256,12 @@ export class RuntimeService {
260256
}
261257

262258
async waitInit() {
263-
const [registerControl, cRuntimeStartFlag, compiledResources, allScripts] = await Promise.all([
264-
chrome.storage.local.get("userscripts_register_control"),
259+
const [cRuntimeStartFlag, compiledResources, allScripts] = await Promise.all([
265260
cacheInstance.get<boolean>("runtimeStartFlag"),
266261
this.compiledResourceDAO.all(),
267262
this.scriptDAO.all(),
268263
]);
269264

270-
if (registerControl?.userscripts_register_control !== USERSCRIPTS_REGISTER_CONTROL) {
271-
await Promise.allSettled([
272-
chrome.userScripts?.unregister(),
273-
chrome.scripting.unregisterContentScripts(),
274-
chrome.storage.local.set({ userscripts_register_control: USERSCRIPTS_REGISTER_CONTROL }),
275-
]);
276-
}
277-
278265
const unregisterScriptIds = [] as string[];
279266
// 没有 CompiledResources 表示这是 没有启用脚本 或 代码有改变需要重新安装。
280267
// 这个情况会把所有有效脚本跟Inject&Content脚本先取消注册。后续载入时会重新以新代码注册。
@@ -579,6 +566,32 @@ export class RuntimeService {
579566
if (!this.isUserScriptsAvailable) {
580567
// 未开启加上警告引导
581568
this.showNoDeveloperModeWarning();
569+
let cid: ReturnType<typeof setInterval> | number;
570+
cid = setInterval(async () => {
571+
if (!this.isUserScriptsAvailable) {
572+
// 注:optional permission 的设计会触发 chrome.permissions.onAdded
573+
// this.isUserScriptsAvailable 自动转为 true, 不需要检测
574+
try {
575+
const scriptId = `undefined-test-${Date.now()}`;
576+
await chrome.userScripts.register([
577+
{
578+
id: scriptId,
579+
js: [{ code: "void 0;" }],
580+
matches: ["https://not-found.scriptcat.org/"],
581+
world: "USER_SCRIPT",
582+
},
583+
]);
584+
await chrome.userScripts.unregister({ ids: [scriptId] });
585+
} catch (_e) {
586+
// 预期出错,不执行后续
587+
return;
588+
}
589+
}
590+
clearInterval(cid);
591+
cid = 0;
592+
// 主要针对 Allow User Scripts 设计
593+
chrome.runtime.reload();
594+
}, 500);
582595
}
583596

584597
// 初始化:加载黑名单
@@ -1379,12 +1392,16 @@ export class RuntimeService {
13791392
if (forced ? false : !this.isUserScriptsAvailable || !this.isLoadScripts) {
13801393
return;
13811394
}
1382-
const result = await chrome.userScripts?.getScripts({ ids: uuids });
1383-
if (!result) return; // 没 userScripts API 权限
1384-
const filteredIds = result.map((entry) => entry.id).filter((id) => !!id);
1385-
if (filteredIds.length > 0) {
1386-
// 修改脚本状态为disable,浏览器取消注册该脚本
1387-
await chrome.userScripts.unregister({ ids: filteredIds });
1395+
try {
1396+
const result = await chrome.userScripts?.getScripts({ ids: uuids });
1397+
if (!result || typeof result !== "object" || typeof result.length !== "number") return; // 没 userScripts API 权限
1398+
const filteredIds = result.map((entry) => entry.id).filter((id) => !!id);
1399+
if (filteredIds.length > 0) {
1400+
// 修改脚本状态为disable,浏览器取消注册该脚本
1401+
await chrome.userScripts.unregister({ ids: filteredIds });
1402+
}
1403+
} catch (e) {
1404+
console.error("unregistryPageScripts error:", e);
13881405
}
13891406
}
13901407
}

src/locales/de-DE/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,9 +412,10 @@
412412
"get_backup_dir_url_failed": "Backup-Verzeichnis-Adresse abrufen fehlgeschlagen",
413413
"get_backup_files_failed": "Backup-Dateien abrufen fehlgeschlagen",
414414
"request_permission": "Beantragen Sie Genehmigungen",
415-
"develop_mode_guide": "Der 'Entwicklermodus' ist derzeit nicht aktiviert, daher können die Skripte nicht richtig ausgeführt werden. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉Hier klicken, um zu erfahren, wie man ihn aktiviert</a>.",
415+
"develop_mode_guide": "Der 'Entwicklermodus' ist derzeit nicht aktiviert, daher können die Skripte nicht richtig ausgeführt werden. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉Hier klicken, um zu erfahren, wie man ihn aktiviert</a>",
416416
"allow_user_script_guide": "'Nutzerskripts zulassen' ist derzeit nicht aktiviert, daher können die Skripte nicht richtig ausgeführt werden. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉Hier klicken, um zu erfahren, wie man es aktiviert</a>",
417417
"lower_version_browser_guide": "Ihr Browser ist zu veraltet, daher können die Skripte nicht richtig ausgeführt werden. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉Hier klicken, um mehr zu erfahren</a>",
418+
"click_to_reload": "👉Zum Neuladen klicken",
418419
"confirm_leave_page": "Derzeit im Bearbeitungsstatus. Das Navigieren zu anderen Seiten führt zum Verlust des aktuellen Inhalts. Navigieren?",
419420
"page_in_blacklist": "Die aktuelle Seite ist auf der Blacklist und kann keine Skripte verwenden",
420421
"baidu_netdisk": "Baidu Netdisk",

src/locales/en-US/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,9 +412,10 @@
412412
"get_backup_dir_url_failed": "Failed to get backup directory address",
413413
"get_backup_files_failed": "Failed to fetch backups",
414414
"request_permission": "Request Permission",
415-
"develop_mode_guide": "'Developer mode' is currently not enabled, so the scripts cannot run properly. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉tap to learn how to enable</a>.",
415+
"develop_mode_guide": "'Developer mode' is currently not enabled, so the scripts cannot run properly. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉tap to learn how to enable</a>",
416416
"allow_user_script_guide": "'Allow User Scripts' is currently not enabled, so the scripts cannot run properly. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉tap to learn how to enable</a>",
417417
"lower_version_browser_guide": "Your browser is too outdated, so the scripts cannot run properly. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉Click me to learn more</a>",
418+
"click_to_reload": "👉Click to Reload",
418419
"confirm_leave_page": "Currently editing status. Leaving this page will lose the current content. Do you want to leave?",
419420
"page_in_blacklist": "The current page is blacklisted, cannot use script",
420421
"baidu_netdisk": "BaiduNetdisk",

src/locales/ja-JP/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,9 +412,10 @@
412412
"get_backup_dir_url_failed": "バックアップディレクトリアドレスの取得に失敗しました",
413413
"get_backup_files_failed": "バックアップファイルの取得に失敗しました",
414414
"request_permission": "権限をリクエストする",
415-
"develop_mode_guide": "現在「デベロッパーモード」が有効ではないため、スクリプトは正常に動作しません。<a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉有効化の方法はこちら</a>",
415+
"develop_mode_guide": "現在「デベロッパーモード」が有効ではないため、スクリプトは正常に動作しません。<a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉有効化の方法はこちら</a>",
416416
"allow_user_script_guide": "現在「ユーザー スクリプトを許可する」が有効ではないため、スクリプトは正常に動作しません。<a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉有効化の方法はこちら</a>",
417417
"lower_version_browser_guide": "ご使用のブラウザは古すぎるため、スクリプトは正常に動作しません。<a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉詳しくはこちら</a>",
418+
"click_to_reload": "👉再読み込みする",
418419
"confirm_leave_page": "現在編集中です。他のページに移動すると現在の内容が失われます。移動しますか?",
419420
"page_in_blacklist": "現在のページはブラックリストにあり、スクリプトを使用できません",
420421
"baidu_netdisk": "百度ネットディスク",

src/locales/ru-RU/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,9 +412,10 @@
412412
"get_backup_dir_url_failed": "Ошибка получения адреса папки резервных копий",
413413
"get_backup_files_failed": "Ошибка получения файлов резервных копий",
414414
"request_permission": "Запрос разрешения",
415-
"develop_mode_guide": "«Режим разработчика» сейчас отключён, поэтому скрипты не могут работать корректно. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉Нажмите, чтобы узнать, как включить</a>.",
415+
"develop_mode_guide": "«Режим разработчика» сейчас отключён, поэтому скрипты не могут работать корректно. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉Нажмите, чтобы узнать, как включить</a>",
416416
"allow_user_script_guide": "«Разрешить пользовательские скрипты» сейчас отключён, поэтому скрипты не могут работать корректно. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉Нажмите, чтобы узнать, как включить</a>",
417417
"lower_version_browser_guide": "Ваш браузер слишком устарел, поэтому скрипты не могут работать корректно. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉Нажмите, чтобы узнать подробнее</a>",
418+
"click_to_reload": "👉Нажмите для перезагрузки",
418419
"confirm_leave_page": "В настоящее время идет редактирование. Переход на другую страницу приведет к потере текущего содержимого. Продолжить переход?",
419420
"page_in_blacklist": "Текущая страница находится в черном списке, невозможно использовать скрипты",
420421
"baidu_netdisk": "Baidu Netdisk",

src/locales/vi-VN/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,9 +412,10 @@
412412
"get_backup_dir_url_failed": "Không thể lấy địa chỉ thư mục sao lưu",
413413
"get_backup_files_failed": "Không thể lấy các bản sao lưu",
414414
"request_permission": "Yêu cầu quyền",
415-
"develop_mode_guide": "'Chế độ nhà phát triển' hiện chưa được bật, nên các script không thể hoạt động đúng cách. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉Nhấn để xem cách bật</a>.",
415+
"develop_mode_guide": "'Chế độ nhà phát triển' hiện chưa được bật, nên các script không thể hoạt động đúng cách. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉Nhấn để xem cách bật</a>",
416416
"allow_user_script_guide": "'Cho phép tập lệnh người dùng' hiện chưa được bật, nên các script không thể hoạt động đúng cách. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉Nhấn để xem cách bật</a>",
417417
"lower_version_browser_guide": "Trình duyệt của bạn quá cũ, nên các script không thể hoạt động đúng cách. <a href=\"https://docs.scriptcat.org/en/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉Nhấn để xem thêm</a>",
418+
"click_to_reload": "👉Nhấp chuột để tải lại",
418419
"confirm_leave_page": "Hiện đang ở trạng thái chỉnh sửa. Rời khỏi trang này sẽ làm mất nội dung hiện tại. Bạn có muốn rời đi không?",
419420
"page_in_blacklist": "Trang hiện tại nằm trong danh sách đen, không thể sử dụng script",
420421
"baidu_netdisk": "Baidunetdisk",

src/locales/zh-CN/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,9 +412,10 @@
412412
"get_backup_dir_url_failed": "获取备份目录地址失败",
413413
"get_backup_files_failed": "获取备份文件失败",
414414
"request_permission": "请求权限",
415-
"develop_mode_guide": "当前未启用“开发者模式”,脚本无法正常运行。<a href=\"https://docs.scriptcat.org/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉点击查看启用方法</a>",
415+
"develop_mode_guide": "当前未启用“开发者模式”,脚本无法正常运行。<a href=\"https://docs.scriptcat.org/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉点击查看启用方法</a>",
416416
"allow_user_script_guide": "当前未启用“允许运行用户脚本”,脚本无法正常运行。<a href=\"https://docs.scriptcat.org/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉点击查看启用方法</a>",
417417
"lower_version_browser_guide": "您的浏览器版本过低,脚本无法正常运行。<a href=\"https://docs.scriptcat.org/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉点击了解更多</a>",
418+
"click_to_reload": "👉点击重新加载",
418419
"confirm_leave_page": "当前正在编辑状态,跳转其它页面将会丢失当前内容,是否跳转?",
419420
"page_in_blacklist": "当前页面在黑名单中,无法使用脚本",
420421
"baidu_netdisk": "百度网盘",

src/locales/zh-TW/translation.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,9 +412,10 @@
412412
"get_backup_dir_url_failed": "取得備份目錄網址失敗",
413413
"get_backup_files_failed": "取得備份檔案失敗",
414414
"request_permission": "要求權限",
415-
"develop_mode_guide": "目前尚未啟用「開發者模式」,腳本無法正常執行。<a href=\"https://docs.scriptcat.org/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉點此查看啟用方式</a>",
415+
"develop_mode_guide": "目前尚未啟用「開發者模式」,腳本無法正常執行。<a href=\"https://docs.scriptcat.org/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉點此查看啟用方式</a>",
416416
"allow_user_script_guide": "目前尚未啟用「允許使用者指令碼」,腳本無法正常執行。<a href=\"https://docs.scriptcat.org/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉點此查看啟用方式</a>",
417417
"lower_version_browser_guide": "您的瀏覽器版本過舊,腳本無法正常執行。<a href=\"https://docs.scriptcat.org/docs/use/open-dev/\" target=\"black\" style=\"color: var(--color-text-1)\">👉點擊了解更多</a>",
418+
"click_to_reload": "👉點擊重新載入",
418419
"confirm_leave_page": "目前正在編輯狀態,跳轉其他頁面將會遺失目前內容,是否跳轉?",
419420
"page_in_blacklist": "目前頁面在黑名單中,無法使用腳本",
420421
"baidu_netdisk": "百度網盤",

src/pages/components/PopupWarnings/index.tsx

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,29 @@ function PopupWarnings({ isBlacklist }: PopupWarningsProps) {
123123
<Alert
124124
type="warning"
125125
content={
126-
<div
127-
dangerouslySetInnerHTML={{
128-
__html: warningMessageHTML,
129-
}}
130-
/>
126+
<div>
127+
<div
128+
dangerouslySetInnerHTML={{
129+
__html: warningMessageHTML,
130+
}}
131+
/>
132+
<a
133+
href="#reload"
134+
style={{ color: "var(--color-text-1)" }}
135+
onClick={(ev) => {
136+
// 点击了刷新链接
137+
chrome.runtime.reload();
138+
ev.preventDefault();
139+
try {
140+
window.close(); // 因为 Vivaldi 重启插件时不会关掉 popup
141+
} catch (e) {
142+
console.error(e);
143+
}
144+
}}
145+
>
146+
{t("click_to_reload")}
147+
</a>
148+
</div>
131149
}
132150
/>
133151
)}

src/pkg/utils/utils.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -179,36 +179,38 @@ export async function checkUserScriptsAvailable() {
179179
// Property access which throws if developer mode is not enabled.
180180
// Method call which throws if API permission or toggle is not enabled.
181181
chrome.userScripts;
182-
const ret: chrome.userScripts.RegisteredUserScript[] | any = await chrome.userScripts?.getScripts({
183-
ids: ["scriptcat-content", "undefined-id-3"],
184-
});
182+
// 没有 chrome.userScripts.getScripts 表示API不可使用
183+
if (typeof chrome.userScripts?.getScripts !== "function") return false;
184+
const ret = await chrome.userScripts.getScripts({ ids: ["scriptcat-content", "scriptcat-inject"] });
185185
// 返回结果不是阵列的话表示API不可使用
186-
if (ret === undefined || ret === null || typeof ret[Symbol.iterator] !== "function") {
186+
if (!ret || typeof ret !== "object" || typeof ret.length !== "number") {
187187
return false;
188188
}
189189

190-
if (ret[0]) {
190+
if (ret[0]?.id) {
191191
// API内部处理实际给予扩展权限才会有返回Script
192-
// 含有 "scriptcat-content" 或 "undefined-id-3"
192+
// 已有注册脚本
193193
return true;
194194
} else {
195-
// 没有 "scriptcat-content" 和 "undefined-id-3"
196-
// 进行 "undefined-id-3" 的注册反注册测试
195+
const scriptId = `undefined-id-${Date.now()}`; // 使用随机id避免并发冲突
196+
// 没有注册脚本
197+
// 进行 ${scriptId} 的注册反注册测试
197198
// Chrome MV3 的一部分浏览器(如 Vivaldi )没正确处理 MV3 UserScripts API 权限问题 (API内部处理没有给予扩展权限)
198199
// 此时会无法注册 (1. register 报错)
199200
await chrome.userScripts.register([
200201
{
201-
id: "undefined-id-3",
202+
id: scriptId,
202203
js: [{ code: "void 0;" }],
203204
matches: ["https://not-found.scriptcat.org/"],
204205
world: "USER_SCRIPT",
205206
},
206207
]);
207-
// 清掉测试内容 (2. 如没有注入 undefined-id-3 成功,因脚本id不存在 unregister 报错)
208-
await chrome.userScripts.unregister({ ids: ["undefined-id-3"] });
208+
// 清掉测试内容 (2. 如没有注入 ${scriptId} 成功,因脚本id不存在 unregister 报错)
209+
await chrome.userScripts.unregister({ ids: [scriptId] });
209210
return true;
210211
}
211-
} catch {
212+
} catch (e) {
213+
console.error("checkUserScriptsAvailable error:", e);
212214
// Not available.
213215
return false;
214216
}

0 commit comments

Comments
 (0)