子页面和dialog案例
!DOCTYPE htmlhtmllangzh-CNheadmetacharsetUTF-8metanameviewportcontentwidthdevice-width, initial-scale1.0title子HTML弹窗 与 弹框 传参demo单文件/titlestyle:root{--primary:#4f6ef7;--primary-dark:#3b55d9;--bg:#f4f6fb;--card:#ffffff;--text:#1f2430;--text-secondary:#6b7280;--border:#e5e7eb;--success-bg:#eafaf0;--success-text:#1a7f4e;--radius:14px;}*{box-sizing:border-box;}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;background:var(--bg);color:var(--text);padding:40px 20px;}.container{max-width:760px;margin:0 auto;}h1{font-size:24px;font-weight:600;margin:006px;}.subtitle{color:var(--text-secondary);font-size:14px;margin:0032px;}.grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;}media(max-width:640px){.grid{grid-template-columns:1fr;}}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:24px;display:flex;flex-direction:column;gap:14px;box-shadow:0 1px 3px rgba(0,0,0,0.04);}.card h2{font-size:16px;margin:0;display:flex;align-items:center;gap:8px;}.card p{font-size:13px;color:var(--text-secondary);margin:0;line-height:1.6;flex:1;}.badge{display:inline-block;font-size:11px;padding:3px 8px;border-radius:999px;background:#eef1ff;color:var(--primary-dark);width:fit-content;}button.action{background:var(--primary);color:#fff;border:none;border-radius:10px;padding:10px 16px;font-size:14px;cursor:pointer;transition:background .15s ease, transform .1s ease;}button.action:hover{background:var(--primary-dark);}button.action:active{transform:scale(0.98);}.result-box{margin-top:28px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:20px 24px;}.result-box h3{font-size:14px;margin:0012px;color:var(--text-secondary);font-weight:500;}.result-item{display:none;align-items:center;gap:10px;background:var(--success-bg);color:var(--success-text);padding:10px 14px;border-radius:10px;font-size:13px;margin-bottom:8px;}.result-item.show{display:flex;}.result-empty{font-size:13px;color:var(--text-secondary);}/* ---- 弹框模态对话框样式 ---- */ dialog{border:none;border-radius:16px;padding:0;width:min(380px,92vw);box-shadow:0 20px 60px rgba(0,0,0,0.18);}dialog::backdrop{background:rgba(20,20,30,0.35);}.modal-inner{padding:24px;}.modal-inner h3{margin:004px;font-size:17px;}.modal-inner .modal-sub{font-size:13px;color:var(--text-secondary);margin:0018px;}.field{margin-bottom:14px;}.field label{display:block;font-size:12px;color:var(--text-secondary);margin-bottom:6px;}.field input{width:100%;padding:9px 12px;border:1px solid var(--border);border-radius:8px;font-size:14px;outline:none;}.field input:focus{border-color:var(--primary);}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px;}button.ghost{background:transparent;border:1px solid var(--border);border-radius:10px;padding:9px 16px;font-size:14px;cursor:pointer;color:var(--text);}button.ghost:hover{background:#f3f4f6;}/* ---- 代码片段展示 ---- */ pre.code{background:#1e2230;color:#e3e6f0;border-radius:10px;padding:14px 16px;font-size:12.5px;line-height:1.6;overflow-x:auto;margin:0;font-family:SFMono-Regular,Consolas,Courier New,monospace;}pre.code .kw{color:#7aa2f7;}pre.code .fn{color:#c0caf5;}pre.code .str{color:#9ece6a;}pre.code .com{color:#6b7280;}/style/headbodydivclasscontainerh1主页面单文件demo/h1pclasssubtitle演示两种向主页面传参的方式弹出子HTML窗口 vs 页内弹框全部写在同一个 html 文件里/pdivclassgriddivclasscardspanclassbadgewindow.open/spanh2① 打开子HTML页面/h2p点击后用 Blob 动态生成一个独立子页面并以弹出窗口形式打开不是新标签页。在子页面填写信息提交后通过 postMessage 把数据传回本页面随后子窗口自动关闭。/pbuttonclassactionidopenChildBtn打开子页面/buttonpreclasscodespanclasscom// 子页面打开弹出窗口/spanspanclasskwconst/spanurlURL.createObjectURL(blob);spanclassfnwindow.open/span(url,spanclassstrchildWindow/span,spanclassstrwidth380,height380/span);spanclasscom// 子页面把数据传回主页面/spanwindow.opener.spanclassfnpostMessage/span({type:spanclassstrCHILD_SUBMIT/span, payload: data},spanclassstr*/span);spanclasscom// 主页面接收数据/spanwindow.spanclassfnaddEventListener/span(spanclassstrmessage/span, e{spanclasskwconst/spandatae.data.payload;});/pre/divdivclasscardspanclassbadgelt;dialoggt;/spanh2② 打开弹框/h2p点击后在当前页面内弹出模态对话框不产生新窗口。填写并提交后直接调用主页面函数拿到数据。/pbuttonclassactionidopenModalBtn打开弹框/buttonpreclasscodespanclasscom// HTML弹框本体与主页面同属一个DOM/spanlt;spanclasskwdialog/spanidspanclassstrmyModal/spangt;...lt;/spanclasskwdialog/spangt;spanclasscom// 打开弹框/spanmodal.spanclassfnshowModal/span();spanclasscom// 提交时直接读取同页面的表单值/spanform.spanclassfnaddEventListener/span(spanclassstrsubmit/span, e{spanclasskwconst/spannamenameInput.value;spanclasscom// 无需跨窗口通信直接使用/span});/pre/div/divdivclassresult-boxh3接收到的数据/h3divclassresult-itemidchildResult/divdivclassresult-itemidmodalResult/divpclassresult-emptyidemptyTip暂无数据试试上面两个按钮/p/div/div!-- 弹框模态对话框本体与主页面同属一个DOM --dialogidmyModaldivclassmodal-innerh3填写信息弹框/h3pclassmodal-sub提交后数据直接传回主页面不会离开当前页面/pformidmodalFormmethoddialogdivclassfieldlabel姓名/labelinputtypetextidmodalNamerequiredplaceholder请输入姓名/divdivclassfieldlabel备注/labelinputtypetextidmodalNoteplaceholder选填/divdivclassmodal-actionsbuttontypebuttonclassghostidcancelModal取消/buttonbuttontypesubmitclassaction提交/button/div/form/div/dialogscriptvar emptyTipdocument.getElementById(emptyTip);var childResultdocument.getElementById(childResult);var modalResultdocument.getElementById(modalResult);functionshowResult(el, text){el.textContenttext;el.classList.add(show);emptyTip.style.displaynone;}// ---- ① 打开子HTML页面弹出窗口用 Blob 动态生成不需要单独的 html 文件 ---- document.getElementById(openChildBtn).addEventListener(click,function(){var childHtml[!DOCTYPE htmlhtml langzh-CNheadmeta charsetUTF-8,title子页面/title,style,body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;background:#fff;color:#1f2430;padding:22px;},h2{font-size:16px;margin:0 0 4px;},.sub{font-size:12px;color:#6b7280;margin:0 0 18px;},.field{margin-bottom:14px;},.field label{display:block;font-size:12px;color:#6b7280;margin-bottom:6px;},.field input{width:100%;padding:9px 12px;border:1px solid #e5e7eb;border-radius:8px;font-size:14px;box-sizing:border-box;outline:none;},.field input:focus{border-color:#4f6ef7;},.actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px;},button{border-radius:10px;padding:9px 16px;font-size:14px;cursor:pointer;border:1px solid #e5e7eb;background:#fff;color:#1f2430;},button.primary{background:#4f6ef7;color:#fff;border:none;},button.primary:hover{background:#3b55d9;},button:hover{background:#f3f4f6;},/style/headbody,h2我是子HTML页面/h2,p classsub这是一个独立的弹出窗口提交后会把数据传回打开它的主页面/p,form idchildForm,div classfieldlabel姓名/labelinput typetext idname required placeholder请输入姓名/div,div classfieldlabel邮箱/labelinput typeemail idemail required placeholder请输入邮箱/div,div classactionsbutton typebutton idcloseBtn取消/buttonbutton typesubmit classprimary提交并关闭/button/div,/form,script,document.getElementById(closeBtn).addEventListener(click, function(){ window.close(); });,document.getElementById(childForm).addEventListener(submit, function(e){, e.preventDefault();, var data { name: document.getElementById(name).value, email: document.getElementById(email).value };, if(window.opener){ window.opener.postMessage({ type: CHILD_SUBMIT, payload: data }, *); }, window.close();,});,\/script,/body/html].join();var blobnew Blob([childHtml],{type:text/html});var urlURL.createObjectURL(blob);// width/height 等参数是让浏览器以弹出窗口而非新标签页打开的关键 window.open(url,childWindow,width380,height380,left200,top150);});// 监听子窗口通过 postMessage 传回的数据 window.addEventListener(message, function(event){if(event.dataevent.data.typeCHILD_SUBMIT){var devent.data.payload;showResult(childResult,来自子页面: 姓名 d.name , 邮箱 d.email);}});// ---- ② 弹框模态对话框 ---- var modaldocument.getElementById(myModal);document.getElementById(openModalBtn).addEventListener(click,function(){modal.showModal();});document.getElementById(cancelModal).addEventListener(click,function(){modal.close();});document.getElementById(modalForm).addEventListener(submit, function(e){var namedocument.getElementById(modalName).value;var notedocument.getElementById(modalNote).value;showResult(modalResult,来自弹框: 姓名 name (note ?, 备注 note:));document.getElementById(modalForm).reset();});/script/body/html

相关新闻

选择重庆报告厅专业音响调试服务,要看哪些适配条件?

选择重庆报告厅专业音响调试服务,要看哪些适配条件?

今天我就给大家分享一些专业音响调试服务的通用选型标准,不过要说明的是,我只输出选型方法,不会做具体的产品推荐。通用选型标准服务团队专业性:专业的服务团队是保障音响调试效果的关键。团队成员应具备相关的专业知识和技能&…

2026/10/24 0:10:09 阅读更多 →
推荐几个牛逼的AI Agent项目

推荐几个牛逼的AI Agent项目

1.智能代码审查AI Agent 项目描述 代码审查AI Agent(CodeGuardian AI) 是面向企业与团队的智能代码审查 Agent。 它将传统静态分析与大语言模型(LLM)深度结合,提供多语言、多维度、高上下文感知的代码问题识别与修复建议。 通过与 Git 仓…

2026/10/26 15:00:41 阅读更多 →
喷洒均匀的农业无人机怎么选?极飞X系列农业机器人给出全新答案

喷洒均匀的农业无人机怎么选?极飞X系列农业机器人给出全新答案

农户真正关心的是:喷药是不是真到叶背叶面,撒肥撒种是不是不重不漏,亩用量是不是前后一致,农忙时机器能不能持续作业,数据能不能留痕。传统认知里,“均匀”常被简化成“甩盘够不够大、料箱够不够满”&#…

2026/10/24 22:39:02 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/27 4:06:49 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/27 4:06:50 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:19:37 阅读更多 →