# shadowrealm-api **Repository Path**: ambit/shadowrealm-api ## Basic Information - **Project Name**: shadowrealm-api - **Description**: 🗳️ 安全的 JavaScript 沙箱,在浏览器中提供独立于全局的隔离运行时环境。依照 ShadowRealm API 提案实现,使用 TC39 Test262 的用例进行测试。 - **Primary Language**: TypeScript - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: https://ambit-tsai.github.io/shadowrealm-api/ - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 2 - **Created**: 2021-11-09 - **Last Updated**: 2024-10-14 ## Categories & Tags **Categories**: javascript-toolkits **Tags**: 沙箱, sandbox, Realm, 沙盒 ## README # ShadowRealm API Polyfill 依照 ShadowRealm API 提案实现的 JavaScript 沙箱,使用 TC39 Test262 的用例进行测试。 简体中文 | [English](https://github.com/ambit-tsai/shadowrealm-api) ```ts declare class ShadowRealm { constructor(); evaluate(sourceText: string): Primitive | Function; importValue(specifier: string, bindingName: string): Promise; } ``` 在线试用一下 🎉 ## 安装 ``` npm i -S shadowrealm-api ``` ## 使用 ### Po**n**yfill: 无侵入性 ```javascript import ShadowRealm from 'shadowrealm-api' const realm = new ShadowRealm(); ``` ### Po**l**yfill: 修补全局对象 ```javascript import 'shadowrealm-api/dist/polyfill' const realm = new ShadowRealm(); ``` ## 调试 打印内部调试信息 ```js ShadowRealm.__debug = true; ``` ## 限制 1. 在 ShadowRealm 中运行的所有代码都处于**严格模式**下; 2. ESM 语句不能含有冗余的注释; ```js // ❌ import/* */defaultExport from "module-name"; export default/* */'xxx'; // ✅ import defaultExport from "module-name"; export default 'xxx'; ``` 3. 不支持导出变量声明; ```js // ❌ export const obj = {...}, fn = () => {...}; // ✅ const obj = {...}, fn = () => {...}; export { obj, fn }; ``` ## 兼容性 |IE|Edge|Firefox|Chrome|Safari|Opera| |:-:|:-:|:-:|:-:|:-:|:-:| ||14|29[1][2]|32[1][2]|8[2][3]|19[1][2]| |||41|49|10.1[3]|36| |||||14.1|| > Notes: > 1. ESM 语句不支持解构赋值; > 1. 顶层作用域需要`fetch`垫片; > 1. 顶层作用域需要`URL`垫片; 使用垫片: ```js import "fetch polyfill"; import "URL polyfill"; import "shadowrealm-api/dist/polyfill"; // 你的代码 ``` ## 联系 1. 微信: cai_fanwei 1. QQ群: 663286147 1. 邮箱: ambit_tsai@qq.com