{"_id":"@aggbond/my-file-preview-mobile","_rev":"6-8f6878a22fbadde767917a0b95516c25","name":"@aggbond/my-file-preview-mobile","dist-tags":{"latest":"1.0.6"},"versions":{"1.0.1":{"name":"@aggbond/my-file-preview-mobile","version":"1.0.1","keywords":["files-preview","pdf","text","html","popup","mobile"],"author":{"name":"aGG-Bond"},"license":"MIT","_id":"@aggbond/my-file-preview-mobile@1.0.1","maintainers":[{"name":"gg_bond","email":"775986968@qq.com"}],"homepage":"https://github.com/aGG-Bond/ReadFilePopupMobile#readme","bugs":{"url":"https://github.com/aGG-Bond/ReadFilePopupMobile/issues"},"dist":{"shasum":"bfa420f56f491fd45650c55167c4ed2acb5d478b","tarball":"https://registry.npmjs.org/@aggbond/my-file-preview-mobile/-/my-file-preview-mobile-1.0.1.tgz","fileCount":6,"integrity":"sha512-vOGe6xAWGwsUlhGUhYIz6g0WNdyqg/jOjDIQPNw9KE4gAAifc+JFXW6NXOEQ1MUjKtlsW0lfNe04+t6/SSy8NA==","signatures":[{"sig":"MEUCID9Rw2lAOJrNmtHqgtRXHqzkZAc849Wy/rMEXDXuGw7yAiEAz6A9YGRmLU1EiK0tHIJUbrPPgaATc0oisyXPnQL16MQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72406},"main":"dist/ReadFilePopupMobile.umd.js","types":"dist/types/ReadFilePopupMobile.d.ts","unpkg":"dist/ReadFilePopupMobile.umd.min.js","module":"dist/ReadFilePopupMobile.esm.js","exports":{".":{"types":"./dist/types/ReadFilePopupMobile.d.ts","import":"./dist/ReadFilePopupMobile.es.js","require":"./dist/ReadFilePopupMobile.umd.js"}},"gitHead":"e2264767305808559b37f2c62b720e05b8ec1253","scripts":{"dev":"vite","docs":"typedoc --out docs/api src/","test":"jest","build":"vite build","preview":"vite preview","prepublishOnly":"npm run build"},"_npmUser":{"name":"gg_bond","email":"775986968@qq.com"},"jsdelivr":"dist/ReadFilePopupMobile.umd.min.js","repository":{"url":"git+https://github.com/aGG-Bond/ReadFilePopupMobile.git","type":"git"},"_npmVersion":"10.9.2","description":"A file preview plugin supporting PDF, text, HTML and rich text files","directories":{},"_nodeVersion":"22.17.1","dependencies":{"@aggbond/my-popup":"^1.0.7"},"publishConfig":{"access":"public","provenance":false},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","terser":"^5.44.1","typescript":"~5.9.3","@types/node":"^25.0.3","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/my-file-preview-mobile_1.0.1_1766558660515_0.5355748794163029","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aggbond/my-file-preview-mobile","version":"1.0.2","keywords":["files-preview","pdf","text","html","popup","mobile"],"author":{"name":"aGG-Bond"},"license":"MIT","_id":"@aggbond/my-file-preview-mobile@1.0.2","maintainers":[{"name":"gg_bond","email":"775986968@qq.com"}],"homepage":"https://github.com/aGG-Bond/ReadFilePopupMobile#readme","bugs":{"url":"https://github.com/aGG-Bond/ReadFilePopupMobile/issues"},"dist":{"shasum":"330a8b2108617fe230976ea0ae1769b5a1ec0c05","tarball":"https://registry.npmjs.org/@aggbond/my-file-preview-mobile/-/my-file-preview-mobile-1.0.2.tgz","fileCount":7,"integrity":"sha512-Qb3lFU617ai2j1Ob+H9I/bzWwHMwRr/XheYXN73fsDr0y9mGZ/mDNjJ24KW0Y4gdMg+oZyOEyo7OnnE+3ratFw==","signatures":[{"sig":"MEYCIQDhXLrzNWHGx+PdwoZ/IfGCSm0tav2AfQswC1PL5M72YwIhAPJ0RZriraUcQeloBOUkuefn3Xulp+7K9smcZBxvdDd2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aggbond%2fmy-file-preview-mobile@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78960},"main":"dist/ReadFilePopupMobile.umd.js","types":"dist/types/ReadFilePopupMobile.d.ts","unpkg":"dist/ReadFilePopupMobile.umd.min.js","module":"dist/ReadFilePopupMobile.esm.js","exports":{".":{"types":"./dist/types/ReadFilePopupMobile.d.ts","import":"./dist/ReadFilePopupMobile.es.js","require":"./dist/ReadFilePopupMobile.umd.js"}},"gitHead":"2f5b788d80c089ae9d80968fc1832ae9bcb6ceeb","scripts":{"dev":"vite","docs":"typedoc --out docs/api src/","test":"jest","build":"vite build","preview":"vite preview","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a971cba-e15f-436e-b3f6-f245cafa0713"}},"jsdelivr":"dist/ReadFilePopupMobile.umd.min.js","repository":{"url":"git+https://github.com/aGG-Bond/ReadFilePopupMobile.git","type":"git"},"_npmVersion":"11.5.1","description":"A file preview plugin supporting PDF, text, HTML and rich text files","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@aggbond/my-popup":"^1.0.7"},"publishConfig":{"access":"public","provenance":false},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","terser":"^5.44.1","typescript":"~5.9.3","@types/node":"^25.0.3","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/my-file-preview-mobile_1.0.2_1766561617328_0.5442168922252884","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@aggbond/my-file-preview-mobile","version":"1.0.3","keywords":["files-preview","pdf","text","html","popup","mobile"],"author":{"name":"aGG-Bond"},"license":"MIT","_id":"@aggbond/my-file-preview-mobile@1.0.3","maintainers":[{"name":"gg_bond","email":"775986968@qq.com"}],"homepage":"https://github.com/aGG-Bond/ReadFilePopupMobile#readme","bugs":{"url":"https://github.com/aGG-Bond/ReadFilePopupMobile/issues"},"dist":{"shasum":"f3710ce1b0082a33961d19818593bbbbbdcd9320","tarball":"https://registry.npmjs.org/@aggbond/my-file-preview-mobile/-/my-file-preview-mobile-1.0.3.tgz","fileCount":9,"integrity":"sha512-jrKCVLCML7j4kFk8XQAT2RRgXbUYEhBnGFfjoZf6iGpw9QoNQOpj9ma0sUtqSSqv1O9ukP4tZskDKZ6FYoIcfQ==","signatures":[{"sig":"MEYCIQDEdChsmLiAyO9zMWlX7CcsR8lcmfuOWUhmEYs6RZ8+FQIhAPRSVK2SxeQNqb2BagltSCt8vJQHXZAC9OCUBQicY8Il","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aggbond%2fmy-file-preview-mobile@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":122626},"main":"dist/ReadFilePopupMobile.umd.js","types":"dist/types/ReadFilePopupMobile.d.ts","unpkg":"dist/ReadFilePopupMobile.umd.min.js","module":"dist/ReadFilePopupMobile.es.js","exports":{".":{"types":"./dist/types/ReadFilePopupMobile.d.ts","import":"./dist/ReadFilePopupMobile.es.js","require":"./dist/ReadFilePopupMobile.umd.js"},"./min":{"import":"./dist/ReadFilePopupMobile.es.min.js","require":"./dist/ReadFilePopupMobile.umd.min.js"}},"gitHead":"3ec796c041f0952dbcf335a45f9dfd5329bf3181","scripts":{"dev":"vite","docs":"typedoc --out docs/api src/","test":"jest","build":"vite build && npm run minify","minify":"node scripts/minify.js","preview":"vite preview","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a971cba-e15f-436e-b3f6-f245cafa0713"}},"jsdelivr":"dist/ReadFilePopupMobile.umd.min.js","repository":{"url":"git+https://github.com/aGG-Bond/ReadFilePopupMobile.git","type":"git"},"_npmVersion":"11.5.1","description":"A file preview plugin supporting PDF, text, HTML and rich text files","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@aggbond/my-popup":"^1.0.7"},"publishConfig":{"access":"public","provenance":false},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","terser":"^5.44.1","typescript":"~5.9.3","@types/node":"^25.0.3","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/my-file-preview-mobile_1.0.3_1766987691710_0.5714322654849631","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@aggbond/my-file-preview-mobile","version":"1.0.4","keywords":["files-preview","pdf","text","html","popup","mobile","security","xss-protection"],"author":{"name":"aGG-Bond"},"license":"MIT","_id":"@aggbond/my-file-preview-mobile@1.0.4","maintainers":[{"name":"gg_bond","email":"775986968@qq.com"}],"homepage":"https://github.com/aGG-Bond/ReadFilePopupMobile#readme","bugs":{"url":"https://github.com/aGG-Bond/ReadFilePopupMobile/issues"},"dist":{"shasum":"65eca1bb677f49f0ddb2b0a1bf4a8164a4e30a2f","tarball":"https://registry.npmjs.org/@aggbond/my-file-preview-mobile/-/my-file-preview-mobile-1.0.4.tgz","fileCount":16,"integrity":"sha512-x15SaTmTy2+Qmp+1nUsBp4659ograR3Y0taq69bdvmlTdRSmrqGxqY5S0Yl1gXeqTvlg8uVXCrNse/KPdQhHrQ==","signatures":[{"sig":"MEYCIQDQnmu/jspfjK36XeOUipyePMgxDorDBfkCNSBAr+CQbwIhAMaUtUWWejPhP4kOXzxFCduHhhfCEmKBUCJOnTytjIOP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aggbond%2fmy-file-preview-mobile@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1986677},"main":"dist/ReadFilePopupMobile.umd.js","types":"dist/types/ReadFilePopupMobile.d.ts","unpkg":"dist/ReadFilePopupMobile.umd.min.js","module":"dist/ReadFilePopupMobile.es.js","exports":{".":{"types":"./dist/types/ReadFilePopupMobile.d.ts","import":"./dist/ReadFilePopupMobile.es.js","require":"./dist/ReadFilePopupMobile.umd.js"},"./min":{"import":"./dist/ReadFilePopupMobile.es.min.js","require":"./dist/ReadFilePopupMobile.umd.min.js"}},"gitHead":"644c5f5c0b2be593f97ad6493bde4336622f3e2c","scripts":{"dev":"vite","docs":"typedoc --out docs/api src/","test":"jest","build":"vite build && npm run minify","minify":"node scripts/minify.js","preview":"vite preview","prepublishOnly":"npm run build && npm run security-check","security-audit":"npm audit","security-check":"echo 'Running security checks...' && npm audit --audit-level moderate"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a971cba-e15f-436e-b3f6-f245cafa0713"}},"jsdelivr":"dist/ReadFilePopupMobile.umd.min.js","repository":{"url":"git+https://github.com/aGG-Bond/ReadFilePopupMobile.git","type":"git"},"_npmVersion":"11.5.1","description":"A secure file preview plugin supporting PDF, text, HTML and rich text files with XSS protection","directories":{},"_nodeVersion":"20.20.2","dependencies":{"dompurify":"^3.1.6","pdfjs-dist":"^6.2.108","@aggbond/my-popup":"^1.0.7"},"publishConfig":{"access":"public","provenance":false},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^7.2.4","terser":"^5.44.1","ts-jest":"^29.1.2","typescript":"~5.9.3","@types/jest":"^29.5.12","@types/node":"^25.0.3","vite-plugin-dts":"^4.5.4","@types/dompurify":"^3.0.5"},"_npmOperationalInternal":{"tmp":"tmp/my-file-preview-mobile_1.0.4_1787495712190_0.745906658423906","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@aggbond/my-file-preview-mobile","version":"1.0.5","keywords":["files-preview","pdf","text","html","popup","mobile","security","xss-protection"],"author":{"name":"aGG-Bond"},"license":"MIT","_id":"@aggbond/my-file-preview-mobile@1.0.5","maintainers":[{"name":"gg_bond","email":"775986968@qq.com"}],"homepage":"https://github.com/aGG-Bond/ReadFilePopupMobile#readme","bugs":{"url":"https://github.com/aGG-Bond/ReadFilePopupMobile/issues"},"dist":{"shasum":"9377b8187c0bf55b400175fa0e6da57400d0115b","tarball":"https://registry.npmjs.org/@aggbond/my-file-preview-mobile/-/my-file-preview-mobile-1.0.5.tgz","fileCount":16,"integrity":"sha512-7xsoJ6fLSd6AWDMwOIk/4jXwDhikOsTPoh+/6h77WOhU7CH0i0xI1YAt5ZoZeAc4NrVp/IOc2tzzFUqNT+XQ0Q==","signatures":[{"sig":"MEYCIQCoptkJ/rVk5tvHTlos1GH9fCabzkiWRZuVQQq/0YyR8gIhAOnLmRgFWtjYe9iinQHkHEZdKjoFADOBWL3SUMy0/2vU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aggbond%2fmy-file-preview-mobile@1.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2262405},"main":"dist/ReadFilePopupMobile.umd.js","types":"dist/types/ReadFilePopupMobile.d.ts","unpkg":"dist/ReadFilePopupMobile.umd.min.js","module":"dist/ReadFilePopupMobile.es.js","exports":{".":{"types":"./dist/types/ReadFilePopupMobile.d.ts","import":"./dist/ReadFilePopupMobile.es.js","require":"./dist/ReadFilePopupMobile.umd.js"},"./min":{"import":"./dist/ReadFilePopupMobile.es.min.js","require":"./dist/ReadFilePopupMobile.umd.min.js"}},"gitHead":"1775122b7c062ccc1478c0c9d456355e34019112","scripts":{"dev":"vite","docs":"typedoc --out docs/api src/","test":"jest","build":"vite build && npm run minify","minify":"node scripts/minify.js","preview":"vite preview","prepublishOnly":"npm run build && npm run security-check","security-audit":"npm audit","security-check":"echo 'Running security checks...' && npm audit --audit-level moderate"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a971cba-e15f-436e-b3f6-f245cafa0713"}},"jsdelivr":"dist/ReadFilePopupMobile.umd.min.js","repository":{"url":"git+https://github.com/aGG-Bond/ReadFilePopupMobile.git","type":"git"},"_npmVersion":"11.5.1","description":"A secure file preview plugin supporting PDF, text, HTML and rich text files with XSS protection","directories":{},"_nodeVersion":"20.20.2","dependencies":{"dompurify":"^3.1.6","pdfjs-dist":"^6.2.108","@aggbond/my-popup":"^1.1.0"},"publishConfig":{"access":"public","provenance":false},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^7.2.4","terser":"^5.44.1","ts-jest":"^29.1.2","typescript":"~5.9.3","@types/jest":"^29.5.12","@types/node":"^25.0.3","vite-plugin-dts":"^4.5.4","@types/dompurify":"^3.0.5","jest-environment-jsdom":"^30.4.1"},"_npmOperationalInternal":{"tmp":"tmp/my-file-preview-mobile_1.0.5_1787901500047_0.3498715954537457","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@aggbond/my-file-preview-mobile","version":"1.0.6","publishConfig":{"provenance":false,"access":"public"},"description":"A secure file preview plugin supporting PDF, text, HTML and rich text files with XSS protection","main":"dist/ReadFilePopupMobile.umd.js","module":"dist/ReadFilePopupMobile.es.js","types":"dist/types/ReadFilePopupMobile.d.ts","unpkg":"dist/ReadFilePopupMobile.umd.min.js","jsdelivr":"dist/ReadFilePopupMobile.umd.min.js","exports":{".":{"types":"./dist/types/ReadFilePopupMobile.d.ts","import":"./dist/ReadFilePopupMobile.es.js","require":"./dist/ReadFilePopupMobile.umd.js"},"./min":{"import":"./dist/ReadFilePopupMobile.es.min.js","require":"./dist/ReadFilePopupMobile.umd.min.js"}},"scripts":{"dev":"vite","build":"node scripts/build-inline-worker.js && vite build && npm run minify","minify":"node scripts/minify.js","preview":"vite preview","test":"jest","prepublishOnly":"npm run build && npm run security-check","docs":"typedoc --out docs/api src/","security-check":"echo 'Running security checks...' && npm audit --audit-level moderate","security-audit":"npm audit"},"keywords":["files-preview","pdf","text","html","popup","mobile","security","xss-protection"],"author":{"name":"aGG-Bond"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aGG-Bond/ReadFilePopupMobile.git"},"bugs":{"url":"https://github.com/aGG-Bond/ReadFilePopupMobile/issues"},"homepage":"https://github.com/aGG-Bond/ReadFilePopupMobile#readme","devDependencies":{"@types/dompurify":"^3.0.5","@types/jest":"^29.5.12","@types/node":"^25.0.3","jest":"^29.7.0","jest-environment-jsdom":"^30.4.1","terser":"^5.44.1","ts-jest":"^29.1.2","typescript":"~5.9.3","vite":"^7.2.4","vite-plugin-dts":"^4.5.4"},"dependencies":{"@aggbond/my-popup":"^1.1.0","dompurify":"^3.1.6","pdfjs-dist":"^6.2.108"},"_id":"@aggbond/my-file-preview-mobile@1.0.6","gitHead":"5390673a5be8007bdc5c8e98253f3bee93301de1","_nodeVersion":"20.20.2","_npmVersion":"11.5.1","dist":{"integrity":"sha512-0S0WsaHTWBtDGs8ucM+V86Hhmsfp5j0iG04P9VDkjOE+OiAqa0am/Qe9LNjm5iM2u9gYHzLDe2YNJyRMH75n4g==","shasum":"5b200d3a028fbc4ac4b65c414462a017bdca6722","tarball":"https://registry.npmjs.org/@aggbond/my-file-preview-mobile/-/my-file-preview-mobile-1.0.6.tgz","fileCount":16,"unpackedSize":13298968,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aggbond%2fmy-file-preview-mobile@1.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHx5wVvX4VTSGH+GSTolt5a9e/QNtVRVrUssdry9fhfRAiEAq+yKERYMS7rkQm8uKOC07PzavRGSDHbEmmrKMSm84Aw="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a971cba-e15f-436e-b3f6-f245cafa0713"}},"directories":{},"maintainers":[{"name":"gg_bond","email":"775986968@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/my-file-preview-mobile_1.0.6_1787911329138_0.06322801777078557"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-24T06:44:20.438Z","modified":"2026-08-28T10:02:09.774Z","1.0.1":"2025-12-24T06:44:20.646Z","1.0.2":"2025-12-24T07:33:37.481Z","1.0.3":"2025-12-29T05:54:51.856Z","1.0.4":"2026-08-23T14:35:12.373Z","1.0.5":"2026-08-28T07:18:20.243Z","1.0.6":"2026-08-28T10:02:09.372Z"},"bugs":{"url":"https://github.com/aGG-Bond/ReadFilePopupMobile/issues"},"author":{"name":"aGG-Bond"},"license":"MIT","homepage":"https://github.com/aGG-Bond/ReadFilePopupMobile#readme","keywords":["files-preview","pdf","text","html","popup","mobile","security","xss-protection"],"repository":{"type":"git","url":"git+https://github.com/aGG-Bond/ReadFilePopupMobile.git"},"description":"A secure file preview plugin supporting PDF, text, HTML and rich text files with XSS protection","maintainers":[{"name":"gg_bond","email":"775986968@qq.com"}],"readme":"# ReadFilePopupMobile.js\n\n移动端文件预览组件，支持 PDF、富文本、引用文本等多种文件类型。\n## 功能特性\n\n- 📄 支持多种文件类型预览（PDF、富文本、引用文本）\n- ✅ 强制阅读弹窗功能\n- 📋 文件列表自动渲染\n- 🔧 灵活的配置选项\n- 🎨 自定义样式支持\n- 🖼️ Canvas PDF 渲染，适合移动端预览\n- 📦 PDF.js 主文件和 Worker 完全内置，零外部依赖\n\n## 安全特性\n\n- HTML 内容自动净化（DOMPurify）\n- 文件路径安全验证\n- 文件类型白名单\n- 错误信息脱敏\n\n## 安装\n\n```bash\nnpm install @aggbond/my-file-preview-mobile\n```\n\n或通过 CDN：\n```html\n<script src=\"https://cdn.jsdelivr.net/npm/@aggbond/my-file-preview-mobile@latest/dist/ReadFilePopupMobile.umd.min.js\"></script>\n```\n\n## 快速开始\n\n### 文件预览\n\n```js\nimport FilePreview from '@aggbond/my-file-preview-mobile';\n\nconst preview = new FilePreview({});\n\n// 通过 URL 加载\npreview.loadFile('/path/to/file.pdf');\npreview.loadFile('/path/to/file.txt', '自定义标题');\n\n// 不指定 file_type，自动判断\npreview.loadFile({ pdf_url: 'https://example.com/doc.pdf' });\n\n// 通过文件对象加载\npreview.loadFile({\n  name: '用户协议',\n  file_type: 1,\n  content_text: '<h2>用户协议</h2><p>协议内容...</p>'\n});\n\npreview.loadFile({\n  name: '隐私政策',\n  file_type: 2,\n  pdf_url: 'https://example.com/privacy.pdf'\n});\n\n// 引用文本（多份文件）\npreview.loadFile({\n  name: '服务条款',\n  file_type: 3,\n  com_terms: [\n    { name: '条款一', pdf_url: 'https://example.com/term1.pdf' },\n    { name: '条款二', content_text: '<p>条款二内容</p>' }\n  ]\n});\n\n\n```\n\n### 强制阅读弹窗\n\n```js\nconst preview = new FilePreview({\n  coerceReadList: {\n    fileList: [\n      { name: '用户协议', file_type: 1, content_text: '<p>协议内容...</p>' }\n    ],\n    btnArr: ['同意', '拒绝'],\n    tipsText: '请仔细阅读以下内容，阅读完毕后点击按钮继续', // 显示在弹窗顶部，不配置不显示\n    showProgressInButton: true,\n    delayConfig: {\n      seconds: 5,\n      buttonIndex: 0,\n      text: '请等待 {seconds} 秒'\n    },\n    coerceCallBack: (control, buttonIndex) => {\n      if (buttonIndex === 0) {\n        if (control.isLastFile()) {\n          alert('已完成阅读');\n        } else {\n          control.next();\n        }\n      }\n    }\n  }\n});\n```\n\n**tipsText 说明：**\n- 显示在弹窗顶部，用于提示用户操作\n- 自动 HTML 转义，防止 XSS\n- 样式：红色背景 (#FFE7E5)，红色文字 (#FF3B30)\n- 不配置则不显示\n\n**控制对象方法：**\n\n| 方法 | 描述 |\n|------|------|\n| `control.next()` | 下一个文件 |\n| `control.prev()` | 上一个文件 |\n| `control.close()` | 关闭弹窗 |\n| `control.goTo(index)` | 跳转到指定索引 |\n| `control.isLastFile()` | 是否为最后一个文件 |\n| `control.getCurrentIndex()` | 获取当前索引 |\n| `control.setButtonTitles(titles)` | 设置按钮标题 |\n| `control.setCheckboxChecked(checked)` | 设置复选框状态 |\n\n### 文件列表\n\n```js\nconst preview = new FilePreview({\n  isDrawFileList: true,\n  listObj: {\n    listId: '#readBox',\n    fileList: [\n      { name: '用户协议', file_type: 1, content_text: '<p>内容...</p>' }\n    ],\n    isCheckButton: true,\n    checkCallBack: (isChecked) => {\n      console.log('复选框状态：', isChecked);\n    }\n  }\n});\n```\n\n## PDF 渲染模式\n\n```js\n// Canvas 渲染（默认，适合移动端）\nnew FilePreview({ useCanvasRender: true });\n\n// iframe 渲染\nnew FilePreview({ useCanvasRender: false });\n\n// 自动检测（移动端用 Canvas，桌面端用 iframe）\nnew FilePreview({ useCanvasRender: 'auto' });\n```\n\nCDN 使用时需配置 PDF.js 路径：\n```js\nnew FilePreview({\n  useCanvasRender: true,\n  pdfJsPath: 'https://cdn.jsdelivr.net/npm/@aggbond/my-file-preview-mobile@latest/dist/ReadFilePopupMobile.umd.min.js'\n});\n```\n\n> Worker 已内联到主文件中，无需额外配置。如需自定义 Worker 路径，可通过 `pdfWorkerPath` 覆盖。\n\n## 配置选项\n\n### 基础配置\n\n| 参数 | 类型 | 默认值 | 描述 |\n|------|------|--------|------|\n| `useCanvasRender` | boolean/string | `true` | PDF 渲染模式：`true` Canvas / `false` iframe / `\"auto\"` 自动检测 |\n| `isConfignFileKeyName` | boolean | `false` | 是否转换文件键名 |\n\n### 安全配置\n\n| 参数 | 类型 | 默认值 | 描述 |\n|------|------|--------|------|\n| `allowLinksAndImages` | boolean | `false` | 是否允许富文本中的 `<a>` 和 `<img>` 标签 |\n\n**allowLinksAndImages 说明：**\n\n- 默认 `false`：出于安全考虑，自动过滤 `<a>` 和 `<img>` 标签及相关属性（href、src等）\n- 设为 `true`：允许链接和图片显示，适用于需要展示外部链接或图片的场景\n\n```js\n// 默认模式：过滤 a/img 标签\nnew FilePreview({});\n\n// 允许链接和图片\nnew FilePreview({ allowLinksAndImages: true });\n```\n\n> ⚠️ **安全提示**：开启此选项时，请确保富文本内容来源可信，避免 XSS 风险\n\n### 文件列表配置 (listObj)\n\n| 参数 | 类型 | 默认值 | 描述 |\n|------|------|--------|------|\n| `listId` | string | `\"\"` | 列表容器 ID |\n| `fileList` | Array | `[]` | 文件列表 |\n| `fileStyle` | Object | `{}` | 文件样式 |\n| `isCheckButton` | boolean | `false` | 是否显示复选框 |\n| `isCoerceReadPopup` | boolean | `true` | 勾选后是否弹出强制阅读 |\n| `checkCallBack` | Function | `() => {}` | 复选框回调 |\n| `listText` | string | `\"更多详情请阅读\"` | 列表文本 |\n| `checkButtonID` | string | `\"ReadFileCheckBox\"` | 复选框 ID |\n\n### 强制阅读配置 (coerceReadList)\n\n| 参数 | 类型 | 默认值 | 描述 |\n|------|------|--------|------|\n| `titleText` | string | `\"请阅读并同意以下文件\"` | 弹窗标题 |\n| `tipsText` | string | `\"\"` | 顶部提示信息 |\n| `fileList` | Array | `[]` | 文件列表 |\n| `btnArr` | Array | `[\"同意并继续\"]` | 按钮文字 |\n| `btnStyle` | Array | `[]` | 按钮样式 |\n| `showProgressInButton` | boolean/number | `false` | 在按钮上显示进度（true 或按钮索引） |\n| `delayConfig` | Object | `undefined` | 延迟配置 |\n| `coerceCallBack` | Array/Function | `[]` | 按钮回调 |\n\n**延迟配置 (delayConfig)：**\n```js\ndelayConfig: {\n  seconds: 5,           // 延迟秒数\n  buttonIndex: 0,       // 延迟按钮索引\n  text: '请等待 {seconds} 秒'  // 延迟文字\n}\n```\n\n### 文件键名映射 (fileKeyNameConfign)\n\n```js\nfileKeyNameConfign: {\n  fileTitle: \"name\",           // 标题字段\n  fileType: \"doc_type\",        // 类型字段\n  filePdfUrl: \"pdf_url\",       // PDF 地址字段\n  fileRichContent: \"content_text\",  // 富文本字段\n  fileArr: \"com_terms\"         // 文件数组字段\n}\n```\n\n## 文件类型\n\n| 类型 | file_type | 说明 |\n|------|-----------|------|\n| 富文本 | `1` | 直接显示 HTML 内容 |\n| PDF | `2` | 使用 Canvas 或 iframe 渲染 |\n| 引用文本 | `3` | 包含多个子文件的复合文档 |\n\n## 方法\n\n| 方法 | 描述 |\n|------|------|\n| `loadFile(fileOrPath, title?)` | 加载文件 |\n| `clearPdfCache()` | 清除 PDF 缓存 |\n| `destroy()` | 销毁实例，清理资源 |\n\n\n\n## 示例\n\n更多使用示例请参考 [demo/test.html](https://github.com/aGG-Bond/ReadFilePopupMobile/blame/main/demo/test.html)，包含 PDF 渲染模式、文件预览、强制阅读、延迟配置、提示信息、PDF 缓存、文件列表等完整功能演示。\n\n## 注意事项\n\n- Canvas 模式要求 PDF 地址允许跨域或与页面同源\n- 页面关闭时自动清理缓存，也可调用 `destroy()` 手动清理\n- UMD 版本已打包所有依赖，开箱即用\n- PDF Worker 已内联到主文件中，无需额外配置外部 Worker 文件\n\n## 许可协议\n\nMIT\n","readmeFilename":"README.md"}