处理后台脚本API
This commit is contained in:
102
src/app/service/content/utils.test.ts
Normal file
102
src/app/service/content/utils.test.ts
Normal file
@@ -0,0 +1,102 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { init, proxyContext, writables } from "./utils";
|
||||
|
||||
describe("proxy context", () => {
|
||||
const context: any = {};
|
||||
const global: any = {
|
||||
gbok: "gbok",
|
||||
onload: null,
|
||||
eval: () => {
|
||||
console.log("eval");
|
||||
},
|
||||
addEventListener: () => {},
|
||||
removeEventListener: () => {},
|
||||
location: "ok",
|
||||
};
|
||||
init.set("onload", true);
|
||||
init.set("location", true);
|
||||
const _this = proxyContext(global, context);
|
||||
|
||||
it("set contenxt", () => {
|
||||
_this["md5"] = "ok";
|
||||
expect(_this["md5"]).toEqual("ok");
|
||||
expect(global["md5"]).toEqual(undefined);
|
||||
});
|
||||
|
||||
it("set window null", () => {
|
||||
_this["onload"] = "ok";
|
||||
expect(_this["onload"]).toEqual("ok");
|
||||
expect(global["onload"]).toEqual(null);
|
||||
_this["onload"] = undefined;
|
||||
expect(_this["onload"]).toEqual(undefined);
|
||||
});
|
||||
|
||||
it("update", () => {
|
||||
_this["okk"] = "ok";
|
||||
expect(_this["okk"]).toEqual("ok");
|
||||
expect(global["okk"]).toEqual(undefined);
|
||||
_this["okk"] = "ok2";
|
||||
expect(_this["okk"]).toEqual("ok2");
|
||||
expect(global["okk"]).toEqual(undefined);
|
||||
});
|
||||
|
||||
it("禁止穿透global对象", () => {
|
||||
expect(_this["gbok"]).toBeUndefined();
|
||||
});
|
||||
|
||||
it("禁止修改window", () => {
|
||||
expect(() => (_this["window"] = "ok")).toThrow();
|
||||
});
|
||||
|
||||
it("访问location", () => {
|
||||
expect(_this.location).not.toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
// 只允许访问onxxxxx
|
||||
describe("window", () => {
|
||||
const _this = proxyContext({ onanimationstart: null }, {});
|
||||
it("window", () => {
|
||||
expect(_this.onanimationstart).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe("兼容问题", () => {
|
||||
const _this = proxyContext({}, {});
|
||||
// https://github.com/xcanwin/KeepChatGPT 环境隔离得不够干净导致的
|
||||
it("Uncaught TypeError: Illegal invocation #189", () => {
|
||||
return new Promise((resolve) => {
|
||||
console.log(_this.setTimeout.prototype);
|
||||
_this.setTimeout(resolve, 100);
|
||||
});
|
||||
});
|
||||
// AC-baidu-重定向优化百度搜狗谷歌必应搜索_favicon_双列
|
||||
it("TypeError: Object.freeze is not a function #116", () => {
|
||||
expect(() => _this.Object.freeze({})).not.toThrow();
|
||||
});
|
||||
});
|
||||
|
||||
describe("Symbol", () => {
|
||||
const _this = proxyContext({}, {});
|
||||
// 允许往global写入Symbol属性,影响内容: https://bbs.tampermonkey.net.cn/thread-5509-1-1.html
|
||||
it("Symbol", () => {
|
||||
const s = Symbol("test");
|
||||
_this[s] = "ok";
|
||||
expect(_this[s]).toEqual("ok");
|
||||
});
|
||||
// toString.call(window)返回的是'[object Object]'而不是'[object Window]',影响内容: https://github.com/scriptscat/scriptcat/issues/260
|
||||
it("Window", () => {
|
||||
expect(toString.call(_this)).toEqual("[object Window]");
|
||||
});
|
||||
});
|
||||
|
||||
// Object.hasOwnProperty穿透 https://github.com/scriptscat/scriptcat/issues/272
|
||||
describe("Object", () => {
|
||||
const _this = proxyContext({}, {});
|
||||
it("hasOwnProperty", () => {
|
||||
expect(_this.hasOwnProperty("test1")).toEqual(false);
|
||||
_this.test1 = "ok";
|
||||
expect(_this.hasOwnProperty("test1")).toEqual(true);
|
||||
expect(_this.hasOwnProperty("test")).toEqual(true);
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user