{"_id":"@amaoaaaaa/window-messenger","_rev":"3-ff72a04c5f8435aea69503c49690f2ec","name":"@amaoaaaaa/window-messenger","dist-tags":{"latest":"1.0.10"},"versions":{"1.0.8":{"name":"@amaoaaaaa/window-messenger","version":"1.0.8","keywords":["postMessage","iframe","eventbus","typescript"],"author":{"name":"amao"},"license":"MIT","_id":"@amaoaaaaa/window-messenger@1.0.8","maintainers":[{"name":"amaoaaaaa","email":"z.d.mao@qq.com"}],"dist":{"shasum":"aa98f52bdb9552f25f0bd32f1aeec342233a6b80","tarball":"https://registry.npmjs.org/@amaoaaaaa/window-messenger/-/window-messenger-1.0.8.tgz","fileCount":8,"integrity":"sha512-jFnNn0PkObybgylmyNM9YS3uPUyGaEOqG4VE1PzpK5vzDsmMmlWJnXJG7FYkck6gOnRpHNpzmBLAayIMhH8azg==","signatures":[{"sig":"MEYCIQCimirFZ2D4VIqepJJyF/K9F36KmX/ZScKuoKtbhirXgAIhAKkdLsTtLjedSdukE4oK5QO5B7MVel8guIInj+94UT/D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21043},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"72195e1125fb4376bde584ef70c6591dc1701302","scripts":{"build":"rollup -c && tsc --emitDeclarationOnly","publish":"npm run build && npm version patch && npm publish --access public"},"_npmUser":{"name":"amaoaaaaa","email":"z.d.mao@qq.com"},"_npmVersion":"10.9.2","description":"A type-safe window.postMessage communication library","directories":{},"_nodeVersion":"20.18.2","_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^2.79.2","typescript":"^5.8.3","@types/node":"^22.14.1","undici-types":"^7.8.0","rollup-plugin-terser":"^7.0.2","@rollup/plugin-typescript":"^12.1.2"},"_npmOperationalInternal":{"tmp":"tmp/window-messenger_1.0.8_1744624490772_0.2175398798985544","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@amaoaaaaa/window-messenger","version":"1.0.9","keywords":["postMessage","iframe","eventbus","typescript"],"author":{"name":"amaoaaaaa"},"license":"MIT","_id":"@amaoaaaaa/window-messenger@1.0.9","maintainers":[{"name":"amaoaaaaa","email":"z.d.mao@qq.com"}],"homepage":"https://github.com/amaoaaaaa/window-messenger#readme","bugs":{"url":"https://github.com/amaoaaaaa/window-messenger/issues"},"dist":{"shasum":"eca1d6b3ba48279b95e0e28f9970f3579c7c0a80","tarball":"https://registry.npmjs.org/@amaoaaaaa/window-messenger/-/window-messenger-1.0.9.tgz","fileCount":8,"integrity":"sha512-4sea3bMxmMhSCIo1SZ8ImppKimAe2zeXpz4jCA4zsqUbyCiutrrbgI6hNNUgOq07mVmOtmaWH81DvbxlNfLmgw==","signatures":[{"sig":"MEUCIQD6ZTo9nBkt4M9Iygln/S3s3G4MR3U6gVi1tXsrIjeZYQIgM2DfiDwmlCrJe7w9YAAXs9a/BVDpzkJX0IUprNUINOI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21336},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"8dd2ec011bb32730348063ba1228505865f58cd5","scripts":{"build":"rollup -c && tsc --emitDeclarationOnly","publish":"npm publish --access public","version-patch":"npm version patch"},"_npmUser":{"name":"amaoaaaaa","email":"z.d.mao@qq.com"},"repository":{"url":"git+https://github.com/amaoaaaaa/window-messenger.git","type":"git"},"_npmVersion":"10.9.2","description":"A type-safe window.postMessage communication library","directories":{},"_nodeVersion":"20.18.2","_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","rollup":"^2.79.2","typescript":"^5.8.3","@types/node":"^22.14.1","undici-types":"^7.8.0","rollup-plugin-terser":"^7.0.2","@rollup/plugin-typescript":"^12.1.2"},"_npmOperationalInternal":{"tmp":"tmp/window-messenger_1.0.9_1744625129506_0.6757837137161806","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@amaoaaaaa/window-messenger","version":"1.0.10","description":"A type-safe window.postMessage communication library","main":"dist/index.cjs","module":"dist/index.mjs","types":"dist/index.d.ts","keywords":["postMessage","iframe","eventbus","typescript"],"repository":{"type":"git","url":"git+https://github.com/amaoaaaaa/window-messenger.git"},"bugs":{"url":"https://github.com/amaoaaaaa/window-messenger/issues"},"homepage":"https://github.com/amaoaaaaa/window-messenger#readme","author":{"name":"amaoaaaaa"},"license":"MIT","scripts":{"build":"rollup -c && tsc --emitDeclarationOnly","version-patch":"npm version patch","publish":"npm publish --access public"},"devDependencies":{"@rollup/plugin-typescript":"^12.1.2","@types/node":"^22.14.1","rollup":"^2.79.2","rollup-plugin-terser":"^7.0.2","tslib":"^2.8.1","typescript":"^5.8.3","undici-types":"^7.8.0"},"_id":"@amaoaaaaa/window-messenger@1.0.10","gitHead":"85aa4775e127daef259ef190f5bcf6176d3dec50","_nodeVersion":"20.18.2","_npmVersion":"10.9.2","dist":{"integrity":"sha512-GMBPuX1MtxfG0Yc0r8Wa1KIBIs5JOquB91qcjFXhO26s53DdNFtFuTy7zODmGvhkYnDrwUDCbVGdSEV37togjA==","shasum":"c4bc351506f5700395260ad7eca151b326e5dbc0","tarball":"https://registry.npmjs.org/@amaoaaaaa/window-messenger/-/window-messenger-1.0.10.tgz","fileCount":8,"unpackedSize":21153,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDm0xNnxhHPKC6uz6VBsBYaZlX22ekcBeYxR5Q4y2maRQIgMlqj9Hmy4Slii6IX0eCCLKr9bGZT5B/qJba3wl//SD0="}]},"_npmUser":{"name":"amaoaaaaa","email":"z.d.mao@qq.com"},"directories":{},"maintainers":[{"name":"amaoaaaaa","email":"z.d.mao@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/window-messenger_1.0.10_1744683078348_0.15619992650107162"},"_hasShrinkwrap":false}},"time":{"created":"2025-04-14T09:54:50.698Z","modified":"2025-04-15T02:11:18.723Z","1.0.8":"2025-04-14T09:54:50.952Z","1.0.9":"2025-04-14T10:05:29.691Z","1.0.10":"2025-04-15T02:11:18.545Z"},"bugs":{"url":"https://github.com/amaoaaaaa/window-messenger/issues"},"author":{"name":"amaoaaaaa"},"license":"MIT","homepage":"https://github.com/amaoaaaaa/window-messenger#readme","keywords":["postMessage","iframe","eventbus","typescript"],"repository":{"type":"git","url":"git+https://github.com/amaoaaaaa/window-messenger.git"},"description":"A type-safe window.postMessage communication library","maintainers":[{"name":"amaoaaaaa","email":"z.d.mao@qq.com"}],"readme":"\r\n# @amaoaaaaa/window-messenger\r\n\r\n> 基于 `window.postMessage` 的类型安全、事件驱动的通信库，用于 iframe 和窗口之间的通信。\r\n\r\n灵感来源于 Node.js 的 `EventEmitter`，并且提供了完整的 TypeScript 类型支持与事件映射类型。\r\n\r\n## ✨ 特性\r\n\r\n- 🔒 类型安全的事件通信，支持泛型\r\n- 🪟 基于 `window.postMessage` 实现\r\n- 🧩 支持 iframe 或同源跨窗口通信\r\n- 🛠 轻量级，无依赖\r\n\r\n## 📦 安装\r\n\r\n```bash\r\nnpm install @amaoaaaaa/window-messenger\r\n```\r\n\r\n或者\r\n\r\n```bash\r\nyarn add @amaoaaaaa/window-messenger\r\n```\r\n\r\n## 🔧 使用\r\n\r\n### 定义共享事件映射\r\n\r\n```ts\r\ninterface MyEvents {\r\n  ready: { time: number };\r\n  ping: string;\r\n  pong: string;\r\n}\r\n```\r\n\r\n### 父页面\r\n\r\n```ts\r\nimport { WindowMessenger } from '@amaoaaaaa/window-messenger';\r\n\r\nconst messenger = new WindowMessenger<MyEvents>(iframeRef.value!.contentWindow!);\r\n\r\nmessenger.on('pong', (msg) => {\r\n  console.log('👶 子页面返回：', msg);\r\n});\r\n\r\nmessenger.on('ready', ({ time }) => {\r\n  console.log('🚀 子页面已就绪', time);\r\n  messenger.emit('ping', 'Who are you?');\r\n});\r\n```\r\n\r\n### 子页面\r\n\r\n```ts\r\nimport { WindowMessenger } from '@amaoaaaaa/window-messenger';\r\n\r\nconst messenger = new WindowMessenger<MyEvents>(window.parent);\r\n\r\nmessenger.on('ping', (msg) => {\r\n  console.log('💬 来自父页面：', msg);\r\n  messenger.emit('pong', \"I'm 揽佬, 来财 来\");\r\n});\r\n\r\nmessenger.emit('ready', { time: Date.now() });\r\n```\r\n\r\n## 🧩 API\r\n\r\n### `new WindowMessenger<T extends EventMap>(targetWindow: Window, targetOrigin = '*')`\r\n\r\n创建一个新的 Messenger 实例。\r\n\r\n- `T`：事件映射的类型。\r\n- `targetWindow`：通信的目标 window。\r\n- `targetOrigin`：目标窗口的源，默认为 `'*'`。\r\n\r\n### `on<K extends keyof T>(event: K, callback: (payload: T[K]) => void): () => void`\r\n\r\n监听事件。\r\n\r\n### `emit<K extends keyof T>(event: K, payload: T[K]): void`\r\n\r\n发送事件。\r\n\r\n### `off<K extends keyof T>(event: K, callback: (payload: T[K]) => void): void`\r\n\r\n移除事件监听。\r\n\r\n## 🔒 安全说明\r\n\r\n此库默认将消息发送到 `targetOrigin = '*'`。在生产环境中，建议明确指定目标窗口的 origin 以增强安全性，避免中间人攻击。\r\n\r\n---\r\n\r\n## 🪪 许可证\r\n\r\n[MIT](./LICENSE)\r\n\r\n```","readmeFilename":"README.md"}