Skip to content

fix: 修复缺少站点访问权限时跨域请求异常的问题#1477

Open
cyfung1031 wants to merge 3 commits into
mainfrom
fix/site-access-grant/001
Open

fix: 修复缺少站点访问权限时跨域请求异常的问题#1477
cyfung1031 wants to merge 3 commits into
mainfrom
fix/site-access-grant/001

Conversation

@cyfung1031
Copy link
Copy Markdown
Collaborator

@cyfung1031 cyfung1031 commented May 28, 2026

Checklist / 检查清单

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

Description / 描述

Close #1476

修复在浏览器未授予 ScriptCat 对目标站点的访问权限时,脚本发起跨域请求可能出现非预期错误的问题。

本次改动会在处理 GM.xmlHttpRequest / 跨域请求权限确认时,先检查扩展是否已拥有目标 origin 的站点访问权限。如果尚未授权,则在确认页面引导用户通过浏览器权限弹窗授予对应站点访问权限,授权成功后再继续执行请求;如果用户拒绝授权,则本次请求会被拒绝。

主要改动

  • 在跨域请求权限校验中增加对 chrome.permissions.contains 的检查。
  • 当缺少目标站点访问权限时,返回新的 extension-site-access 确认类型。
  • 在确认页面中调用 chrome.permissions.request,通过用户手势请求站点访问权限。
  • 针对站点访问权限确认场景,简化确认页面按钮,只显示“请求权限”。
  • 为多语言文件补充“ScriptCat 需要站点访问权限”相关文案。
  • 保留原有 CORS / @connect 权限判断逻辑,并在已允许 CORS 但缺少站点访问权限时继续请求浏览器站点权限。

测试

已验证以下场景:

  • 未授予站点访问权限时,会弹出 ScriptCat 的站点访问权限确认页面。
  • 用户点击请求权限后,会触发浏览器的站点访问权限授权弹窗。
  • 用户拒绝授权时,请求会被正确拒绝。
  • 用户允许授权后,请求可以继续执行。
  • 原有 CORS 权限确认流程仍可正常工作。

Screenshots / 截图

Screenshot 2026-05-29 at 0 45 34 Screenshot 2026-05-29 at 0 45 39

DENY

Screenshot 2026-05-29 at 0 45 48

ALLOW

Screenshot 2026-05-29 at 0 46 01 Screenshot 2026-05-29 at 0 46 10

m501a.user.js
m501b.user.js
server.zip

@cyfung1031 cyfung1031 changed the title fix site-access-grant fix: 修复缺少站点访问权限时跨域请求异常的问题 May 28, 2026
@cyfung1031 cyfung1031 requested a review from CodFrm May 28, 2026 16:14
@CodFrm CodFrm requested a review from Copilot May 28, 2026 16:16
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 旨在修复当浏览器未授予扩展对目标站点的“站点访问权限”时,脚本发起 GM.xmlHttpRequest / GM_xmlhttpRequest 跨域请求可能出现非预期异常的问题。整体思路是在原有 @connect / CORS 确认链路之外,增加对扩展“站点访问权限(Site access)”的检测与引导授权,从而避免在权限被浏览器侧拦截时产生不可控错误。

Changes:

  • 在 Service Worker 侧为 XHR 跨域请求增加 chrome.permissions.contains 检测,并在缺少站点访问权限时返回新的确认类型 extension-site-access
  • 在确认页面中增加 chrome.permissions.request({ origins }) 的用户手势授权流程,并为 extension-site-access 场景简化按钮 UI
  • 为多语言资源补充“需要站点访问权限”的标题/描述/内容文案

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/pages/confirm/App.tsx 确认页新增站点访问权限请求逻辑,并对 extension-site-access 场景简化按钮
src/app/service/service_worker/permission_verify.ts 扩展 ConfirmParam,增加 extensionSiteAccessOrigins 字段用于确认页触发权限申请
src/app/service/service_worker/gm_api/gm_api.ts XHR 权限确认前新增站点访问权限检测,必要时返回 extension-site-access 确认
src/locales/zh-TW/translation.json 新增站点访问权限相关文案(繁中)
src/locales/zh-CN/translation.json 新增站点访问权限相关文案(简中)
src/locales/vi-VN/translation.json 新增站点访问权限相关文案(越南语)
src/locales/ru-RU/translation.json 新增站点访问权限相关文案(俄语)
src/locales/ja-JP/translation.json 新增站点访问权限相关文案(日语)
src/locales/en-US/translation.json 新增站点访问权限相关文案(英语)
src/locales/de-DE/translation.json 新增站点访问权限相关文案(德语)

Comment thread src/pages/confirm/App.tsx
Comment on lines +48 to +62
if (allow && confirm?.extensionSiteAccessOrigins?.length) {
const granted = await chrome.permissions.request({
origins: confirm.extensionSiteAccessOrigins,
});
if (!granted) {
await permissionClient
.confirm(uuid, {
allow: false,
type,
})
.catch(() => {});
window.close();
return;
}
}
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

only 1

Comment on lines +810 to +817
const originPattern = `${url.origin}/*`;
let hasOriginPermission = false;
try {
hasOriginPermission = await chrome.permissions.contains({ origins: [originPattern] });
} catch (e) {
console.warn(e);
}
const extensionSiteAccessOrigins = hasOriginPermission ? undefined : [originPattern];
Copy link
Copy Markdown
Collaborator Author

@cyfung1031 cyfung1031 May 28, 2026

Choose a reason for hiding this comment

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

  1. 要包括 port
  2. file:/// 暂不理会 36ad338
  3. fixed about:blank, data:text/html,... in 408f0e3

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] 缺少扩展站点访问权限时 GM_xmlhttpRequest 跨域请求会出现非预期错误

2 participants