fix: 修正被破坏的沙盒 Fix Corrupted Sandbox#966
Conversation
|
@CodFrm 这个算是Bug修正。我有脚本用 |
There was a problem hiding this comment.
Pull Request Overview
本 PR 修复了沙盒环境中的关键问题(issue #962),使 ScriptCat 的沙盒行为与 TamperMonkey 保持一致。主要解决了 window 对象的原型链、构造函数和事件监听器的正确性问题。
主要变更:
- 引入
PseudoWindow类来正确模拟 Window 原型链,确保window.constructor === Window且window instanceof Window === false - 修复了
descsCache的使用,防止子类属性被父类属性覆盖 - 调整测试环境设置,模拟真实浏览器的
Symbol.toStringTag和EventTarget行为
Reviewed Changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 6 comments.
| File | Description |
|---|---|
| src/app/service/content/create_context.ts | 核心修复:引入 PseudoWindow 类和改进的沙盒初始化逻辑,修复 window 原型链问题 |
| tests/vitest.setup.ts | 测试环境增强:配置 Symbol.toStringTag 和 EventTarget 以匹配浏览器行为 |
| src/app/service/content/exec_script.test.ts | 测试更新:移除部分并发测试,添加 TM Sandbox Window 测试用例验证修复 |
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
|
我似乎又遇到了一个沙盒问题,使用 Bilibili-Evolved 安装插件,下载视频,会出现下面这个错误,看起来是fetch没有.bind
https://www.bilibili.com/video/BV1zuxbzFEJd/ 一个最小化可复现脚本: // ==UserScript==
// @name New Userscript E381-1
// @namespace https://docs.scriptcat.org/
// @version 0.1.0
// @description try to take over the world!
// @author You
// @match https://www.bilibili.com/video/BV1zuxbzFEJd/
// @icon https://www.google.com/s2/favicons?sz=64&domain=www.bilibili.com
// @grant unsafeWindow
// ==/UserScript==
fetch("https://bbs.tampermonkey.net.cn/") |
|
我看看 |
也不對。。。不是這原因 我了解一下 |
我这里启用了 AdGuard 就会出现这个问题(扩展拿不到最原始的fetch),关闭这个问题就消失了(拿到了最原始的fetch),这个问题也好奇怪(TM也是如此) 之前也有因为 AdGuard 产生的问题: #773 (comment)
|
|
处理好了 你讲得没错。是没 bind 好 |





概述 Descriptions
Close #962
腳本驗證
Install https://raw.githubusercontent.com/Nuklon/Steam-Economy-Enhancer/master/code.user.js
Open https://steamcommunity.com/market/
测试用脚本:
https://www.ign.com/wikis/starcraft/Terran_Story
变更内容 Changes
截图 Screenshots