知蛛网
  • 首页
  • 会员
  • 活动
  • 工作台

常见问题
活动
关于我们
联系我们
隐私协议
用户协议
会员协议
© 2026 知蛛网. 保留所有权利。
首页会员工作台我的
flynn@flynn
主页wiki简历作品集
目录
全部书籍
00-路线
  • 学习路线
  • 命名与写作规范
01-计算机基础
01-计算机网络
  • 互联网是如何工作的
  • HTTP协议
  • TCP/IP协议
  • 浏览器直接打开本地html文件,请求时的协议问题
02-浏览器原理
  • 浏览器是如何渲染页面的
  • 浏览器是如何渲染页面的
  • 面试之浏览器
03-操作系统
  • 进程与线程
  • 内存管理与虚拟内存
  • IO 模型与多路复用
  • 文件系统与页缓存
04-数据结构与算法
  • 数组与链表
  • 栈与队列
  • 哈希表
  • 树与堆
  • 基础数据结构
01-基础数据结构
02-高级算法
  • 排序算法
  • 二分查找
  • 递归与回溯
  • 动态规划
  • 双指针与滑动窗口
03-leetcode刷题
02-前端核心
01-web开发
  • Web 和 Web 标准
  • web 入门
  • web 开发
  • URL
  • 域名
  • Web服务器
  • 命令行
  • 工作流程和流程
  • 超链接
  • 浏览器指纹
02-html
  • HTML基础语法
  • HTML 概述
  • HTML 发展史
  • HTML调试
  • HTML标题与段落
  • 文本格式化
  • 强调与重要性
  • 块级元素和内联元素
  • 列表
  • 区块
  • 语义元素
  • 页面结构化和语义化
  • 超链接
  • 相对路径和绝对路径
  • 图片
  • 表格
  • 表单和按钮
  • 多媒体
  • 视频/音频
  • HTML 头部
  • HTML 字符集
  • HTML颜色
  • HTML 语言代码
  • HTML 国家/地区
  • Emoji (表情符号)
  • HTML 标签简写及全称 |
  • SVG
  • Canvas 2D
  • Canvas 3D
  • 框架 `<iframe>`
  • HTML 拖放
  • HTML5 Geolocation(地理定位)
  • Web 存储
  • HTML URL 编码
  • MathML
  • 远程图片资源在自己网站中无法展示问题
03-css
  • CSS简介
  • CSS 语法
  • CSS 创建
  • CSS 发展史
  • CSS 浏览器支持
  • CSS 选择器
  • CSS `!important` 规则
  • css颜色
  • CSS 文本格式
  • CSS 盒子模型
  • CSS 尺寸
  • CSS 内边距
  • CSS 外边距
  • CSS 边框
  • CSS 轮廓
  • CSS 背景(background)
  • CSS 溢出
  • CSS 文档流
  • CSS 显示和可见性
  • CSS 浮动
  • CSS 定位
  • CSS 对齐方式
  • CSS 网页布局
  • CSS 多列布局(CSS Multi-column Layout)
  • CSS 透明度
  • CSS 响应式设计(Responsive Design)
  • CSS 媒体查询
  • CSS 列表
  • CSS 表格
  • CSS 表单
  • CSS 链接
  • CSS 用户界面
  • CSS 计数器
  • CSS 过渡
  • CSS 动画
  • CSS 2D 转换
  • CSS 3D 转换
  • CSS 变量(CSS Custom Properties)
  • CSS 原生嵌套(CSS Nesting)
  • CSS 函数(CSS Functions)
04-javascript
  • 什么是 JavaScript?
  • 编程范式(Programming Paradigm)
  • 什么是范式?
  • ECMAScript 规范
  • 什么是语法糖
  • 开发环境搭建
  • 什么是堆和栈?
  • 什么是执行上下文
  • JavaScript 垃圾回收机制
  • 作业队列与事件循环
  • 深拷贝和浅拷贝
  • 语法与类型
  • 字面量
  • 控制流与错误处理
  • 循环与迭代
  • 函数
  • 表达式与运算符
  • 数字和字符串
  • 表达日期与时间
  • 正则表达式
  • 索引集合类
  • 带键的集合
  • 对象
  • 类
  • Promise
  • async/await
  • 迭代器和生成器
  • 国际化
  • 模块
  • 资源管理
  • 属性的可枚举性和所有权
  • 闭包
  • 继承与原型链
  • 元编程
  • 内存管理
  • 内置对象
  • arguments 对象
  • BOM 对象(浏览器对象模型)
  • DOM 对象(文档对象模型)
  • bind、apply、call的区别
  • new 操作符
  • typeof 和 instanceof 的区别
  • HTML5 Web Workers
05-typescript
  • TypeScript 类型系统基础
  • 类型体操
03-框架与跨端
01-react
  • 开发环境搭建
  • JSX
  • 组件
  • 生命周期
  • Hooks
  • 组件通信
  • 状态管理
  • React 19 新特性
  • useCallback 闭包陷阱
  • 常用的性能优化操作
  • Firbe 架构
  • React 18 新特性
  • useRef
  • 基于umijs 4.0 搭建官网
  • react+vite本地开发,如何手机联调
  • React 实现谷歌登录
  • React 项目调起 WhatsApp
02-vue
  • vue 解决跨域请求
  • 在vue2使用TinyMCE富文本编辑器
  • 使用jszip 导出新闻
  • Vue 本地开发启用 https
  • 基于vue3+vite+ts+elementplus+pinia+axios搭建后台管理系统
03-react-native
  • iOS 开发环境(RN 0.72)
  • RN 原生模块(Native Module)
  • 查看Maven包的Java包名
  • 优化 APP 启动速度
  • 安全键盘
  • 启动图与 Icon 尺寸规范
  • RN如何生成/配置iOS的开发者证书和生产证书
  • 邓白氏编码
  • 微信开放平台配置Universal Link
  • 上架至Apple App Store
04-android
  • 开发环境搭建
  • Android项目目录结构
  • 认识Gradle
04-工程化
01-git
  • 如何解决已被git跟踪文件不在跟踪
  • git标签
  • Git报错: Failed to connect to github.com port 443 解决方案
  • Git 分支操作速查
02-构建工具
  • 构建工具原理与选型
02-webpack
  • webpack 核心概念与构建流程
  • webpack 性能优化
03-vite
  • vite 为什么快
  • vite 插件与生产构建
03-测试
  • 前端测试体系
04-部署
  • Nginx 反向代理解决跨域
  • SPA 刷新非首页报 404
05-docker
  • Docker 常用命令
  • docker-compose nginx配置ssl证书
  • Docker Desktop 升级后 docker-compose 命令找不到
06-性能优化
  • 前端性能优化体系
  • 背景 GIF 优化方案
07-微前端
  • 微前端实战(qiankun)
  • 微前端 · qiankun
01-qiankun
05-后端与数据
01-nodejs
  • Node 版本与依赖的 engines 冲突
  • Express 实现 Gmail 发信(邮箱验证码)
02-php
  • 浏览器保存新闻,发布到自有网站
  • [分布式] 浏览器保存新闻,发布到自有网站
  • 邮件发送,多账号轮询
  • nginx和php-fpm通信问题导致网站页面空白
03-python
  • macOS M1 芯片 如何安装 py 和 tkinter
  • tkinter 编写的程序如何打包成桌面软件
04-架构设计
  • 后台管理系统中角色管理、管理员管理、权限设置他们三者之间的关系
05-运维
  • redis启动失败
  • 实现自动备份宝塔项目及数据库到本地
  • 宝塔面板
01-宝塔
06-实战项目
  • 实战准备工作
02-项目记录
  • AI-Chat 模块技术文档
  • CRMChat 部署
07-面试专项
01-面试
  • 面试之自我介绍
  • CSS 面试
  • JS面试
  • React面试
  • Vue面试
  • RN 面试 · 题目清单
  • RN 面试 · 答案详解
  • RN 物流公司 · 题目清单
  • RN 物流公司 · 答案详解
  • Uniapp 面试
  • 带团队经验
12-react专项
  • 一个表格,某一行的某一列数据变动了,如何优化性能?
13-reactnative专项
  • RN 开发过程中,有遇到什么棘手的问题?你是如何解决的?
14-过往面试总结
  • 冷哥传媒 · 面试题
  • 沐腾科技 · 面试题
  • 字符频率排序
02-面试八股
  • 网络八股
  • 浏览器八股
  • 工程化八股
03-算法面试题
  • 前端高频手写题
  • 场景设计题
04-真实面试经历
  • 20251027 盾蓝科技 面试
  • 20251028 芝麻甜心 面试
08-工具
01-n8n
  • 初始n8n
  • 快速入门
  • 在宝塔中搭建n8n环境
  • n8n中常用节点
  • n8n和代码的区别
02-Trae
  • Figma MCP 配置指南
03-UI_UX_pro_max
  • UI_UX_pro_max的使用
04-开发环境
  • VMWare虚拟机安装
  • PowerShell 执行策略与编码设置
98-杂项
  • A股股票交易相关费用
99-手册
  • iOS 开发者账号申请流程及费用
  • 邓白氏编码申请及费用
  • App 推送通道申请及费用
  • App 开发收费项目清单
  • 注册AWS账号
  • 使用Amazon Polly实现文本转语音
  • Google 翻译 Key 申请与前端调用
  • 使用SmsForwarder转发短信

框架 `<iframe>`

02-html2026/11/14

<iframe>(内联框架)用于在网页中嵌入另一个网页。

基本语法

最简单的使用

<iframe src="https://example.com"></iframe>

带尺寸和边框

<iframe 
    src="embedded-page.html"
    width="800"
    height="600"
    frameborder="0">
</iframe>

核心属性详解

1. src - 嵌入页面地址

<!-- 外部网站 -->
<iframe src="https://www.wikipedia.org"></iframe>

<!-- 相对路径 -->
<iframe src="local-page.html"></iframe>

<!-- 绝对路径 -->
<iframe src="/pages/embedded.html"></iframe>

<!-- 空框架 -->
<iframe src="about:blank"></iframe>

2. width 和 height - 尺寸控制

<!-- 固定像素 -->
<iframe src="content.html" width="300" height="200"></iframe>

<!-- 百分比 -->
<iframe src="content.html" width="100%" height="500"></iframe>

<!-- 通过 CSS 控制 -->
<iframe src="content.html" style="width: 100%; height: 400px;"></iframe>

3. name - 框架名称

<!-- 命名框架 -->
<iframe src="default.html" name="contentFrame"></iframe>

<!-- 链接目标指向该框架 -->
<a href="page1.html" target="contentFrame">在框架中打开</a>
<a href="page2.html" target="contentFrame">另一个页面</a>

4. srcdoc - 内联 HTML 内容

<iframe srcdoc="
    <!DOCTYPE html>
    <html>
    <head><title>内嵌内容</title></head>
    <body>
        <h1>Hello World!</h1>
        <p>这是直接嵌入的HTML内容</p>
    </body>
    </html>
"></iframe>

5. sandbox - 安全沙箱

<!-- 最严格的沙箱 -->
<iframe src="untrusted.html" sandbox></iframe>

<!-- 允许特定功能 -->
<iframe src="content.html" sandbox="allow-scripts allow-forms"></iframe>

<!-- 常用沙箱配置 -->
<iframe src="content.html" sandbox="allow-scripts allow-same-origin allow-forms"></iframe>

沙箱属性值:

  • allow-forms - 允许表单提交
  • allow-scripts - 允许执行脚本
  • allow-same-origin - 允许同源访问
  • allow-popups - 允许弹出窗口
  • allow-top-navigation - 允许导航顶级页面

6. allow - 功能策略

<!-- 允许全屏 -->
<iframe src="video.html" allow="fullscreen"></iframe>

<!-- 允许支付请求 -->
<iframe src="payment.html" allow="payment"></iframe>

<!-- 多个权限 -->
<iframe src="app.html" allow="camera; microphone; geolocation"></iframe>

7. loading - 加载行为

<!-- 延迟加载 -->
<iframe src="heavy-content.html" loading="lazy"></iframe>

<!-- 立即加载 -->
<iframe src="important-content.html" loading="eager"></iframe>
上一篇Canvas 3D
下一篇HTML 拖放
本页目录
基本语法最简单的使用带尺寸和边框核心属性详解1. src - 嵌入页面地址2. width 和 height - 尺寸控制3. name - 框架名称4. srcdoc - 内联 HTML 内容5. sandbox - 安全沙箱6. allow - 功能策略7. loading - 加载行为实际应用场景1. 嵌入第三方服务2. 创建多页面应用3. 动态内容加载JavaScript 交互1. 访问 iframe 内容2. 跨文档消息传递响应式 iframe1. 保持宽高比2. 多种宽高比安全最佳实践1. 安全的 iframe 配置2. 防止点击劫持错误处理1. 加载失败处理性能优化1. 延迟加载2. 按需加载iframe 优缺点优点缺点

实际应用场景

1. 嵌入第三方服务

<!-- 嵌入 YouTube 视频 -->
<iframe 
    width="560" 
    height="315" 
    src="https://www.youtube.com/embed/视频ID" 
    frameborder="0" 
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" 
    allowfullscreen>
</iframe>

<!-- 嵌入 Google 地图 -->
<iframe
    src="https://www.google.com/maps/embed?pb=地图参数"
    width="600"
    height="450"
    style="border:0;"
    allowfullscreen=""
    loading="lazy">
</iframe>

<!-- 嵌入在线文档 -->
<iframe
    src="https://docs.google.com/document/d/文档ID/preview"
    width="100%"
    height="600"
    frameborder="0">
</iframe>

2. 创建多页面应用

<!DOCTYPE html>
<html>
<head>
    <style>
        .sidebar { float: left; width: 200px; }
        .content { margin-left: 220px; }
        iframe { border: 1px solid #ccc; border-radius: 5px; }
    </style>
</head>
<body>
    <div class="sidebar">
        <h3>导航菜单</h3>
        <ul>
            <li><a href="home.html" target="mainFrame">首页</a></li>
            <li><a href="about.html" target="mainFrame">关于我们</a></li>
            <li><a href="services.html" target="mainFrame">服务</a></li>
            <li><a href="contact.html" target="mainFrame">联系我们</a></li>
        </ul>
    </div>
    
    <div class="content">
        <iframe 
            src="home.html"
            name="mainFrame"
            width="100%"
            height="600"
            frameborder="0">
        </iframe>
    </div>
</body>
</html>

3. 动态内容加载

<!DOCTYPE html>
<html>
<head>
    <script>
        function loadPage(url) {
            document.getElementById('contentFrame').src = url;
        }
        
        function showCustomContent() {
            const iframe = document.getElementById('contentFrame');
            iframe.srcdoc = `
                <!DOCTYPE html>
                <html>
                <head>
                    <style>
                        body { 
                            font-family: Arial; 
                            padding: 20px; 
                            background: #f0f0f0;
                        }
                        h1 { color: #333; }
                    </style>
                </head>
                <body>
                    <h1>动态生成的内容</h1>
                    <p>当前时间: ${new Date().toLocaleString()}</p>
                    <button onclick="alert('来自iframe的消息!')">点击我</button>
                </body>
                </html>
            `;
        }
    </script>
</head>
<body>
    <button onclick="loadPage('page1.html')">加载页面1</button>
    <button onclick="loadPage('page2.html')">加载页面2</button>
    <button onclick="showCustomContent()">显示动态内容</button>
    
    <iframe 
        id="contentFrame"
        src="about:blank"
        width="100%"
        height="400"
        style="border: 1px solid #ddd; margin-top: 10px;">
    </iframe>
</body>
</html>

JavaScript 交互

1. 访问 iframe 内容

<!-- 主页面 -->
<iframe id="myFrame" src="child.html"></iframe>

<script>
    const iframe = document.getElementById('myFrame');
    
    // 等待 iframe 加载完成
    iframe.addEventListener('load', function() {
        try {
            // 访问 iframe 的文档
            const iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
            const iframeWindow = iframe.contentWindow;
            
            // 修改 iframe 内容
            iframeDoc.body.style.backgroundColor = 'lightblue';
            
            // 调用 iframe 中的函数
            iframeWindow.someFunctionInIframe();
            
        } catch (e) {
            console.log('同源策略限制:', e);
        }
    });
</script>

2. 跨文档消息传递

<!-- 主页面 -->
<iframe id="childFrame" src="child.html"></iframe>

<script>
    const iframe = document.getElementById('childFrame');
    
    // 向 iframe 发送消息
    function sendToIframe(message) {
        iframe.contentWindow.postMessage(message, '*');
    }
    
    // 接收来自 iframe 的消息
    window.addEventListener('message', function(event) {
        console.log('收到消息:', event.data);
        
        // 验证来源(可选)
        if (event.origin !== 'https://expected-domain.com') return;
        
        // 处理消息
        if (event.data.type === 'userAction') {
            handleUserAction(event.data.payload);
        }
    });
</script>

<!-- child.html (iframe 内容) -->
<script>
    // 向父页面发送消息
    function sendToParent(message) {
        window.parent.postMessage(message, '*');
    }
    
    // 接收父页面消息
    window.addEventListener('message', function(event) {
        console.log('iframe收到:', event.data);
    });
    
    // 示例:发送用户操作
    document.getElementById('someButton').addEventListener('click', function() {
        sendToParent({
            type: 'userAction',
            payload: { action: 'buttonClick', value: 'hello' }
        });
    });
</script>

响应式 iframe

1. 保持宽高比

<style>
    .responsive-iframe-container {
        position: relative;
        width: 100%;
        height: 0;
        padding-bottom: 56.25%; /* 16:9 宽高比 */
    }
    
    .responsive-iframe {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        border: none;
    }
</style>

<div class="responsive-iframe-container">
    <iframe 
        class="responsive-iframe"
        src="https://www.youtube.com/embed/视频ID"
        allowfullscreen>
    </iframe>
</div>

2. 多种宽高比

<style>
    /* 16:9 (视频) */
    .aspect-16-9 { padding-bottom: 56.25%; }
    
    /* 4:3 (传统屏幕) */
    .aspect-4-3 { padding-bottom: 75%; }
    
    /* 1:1 (正方形) */
    .aspect-1-1 { padding-bottom: 100%; }
    
    /* 21:9 (超宽屏) */
    .aspect-21-9 { padding-bottom: 42.85%; }
</style>

<div class="responsive-iframe-container aspect-16-9">
    <iframe src="video.html" class="responsive-iframe"></iframe>
</div>

安全最佳实践

1. 安全的 iframe 配置

<!-- 推荐的安全配置 -->
<iframe
    src="https://trusted-domain.com/content"
    sandbox="allow-scripts allow-same-origin allow-forms"
    allow="fullscreen"
    referrerpolicy="no-referrer"
    loading="lazy"
    title="安全嵌入内容">
</iframe>

2. 防止点击劫持

<!-- 在嵌入的页面中添加 -->
<style>
    /* 防止在 iframe 中显示 */
    body {
        header: X-Frame-Options: DENY;
    }
</style>

<script>
    // 或者通过 JavaScript
    if (window !== window.top) {
        window.top.location = window.location;
    }
</script>

错误处理

1. 加载失败处理

<iframe 
    src="https://example.com/might-fail"
    onerror="handleIframeError(this)">
</iframe>

<script>
    function handleIframeError(iframe) {
        console.error('iframe 加载失败');
        iframe.srcdoc = `
            <html>
            <body style="text-align: center; padding: 20px;">
                <h3>内容加载失败</h3>
                <p>请检查网络连接或稍后重试</p>
                <button onclick="window.location.reload()">重新加载</button>
            </body>
            </html>
        `;
    }
</script>

性能优化

1. 延迟加载

<!-- 视口外 iframe 延迟加载 -->
<iframe 
    src="heavy-content.html" 
    loading="lazy"
    width="600" 
    height="400">
</iframe>

2. 按需加载

<button onclick="loadIframe()">点击加载内容</button>
<div id="iframeContainer"></div>

<script>
    function loadIframe() {
        const container = document.getElementById('iframeContainer');
        container.innerHTML = `
            <iframe 
                src="heavy-content.html"
                width="100%"
                height="400"
                onload="console.log('iframe加载完成')">
            </iframe>
        `;
    }
</script>

iframe 优缺点

优点

  • 隔离第三方内容
  • 嵌入外部服务
  • 创建微前端架构
  • 内容沙箱化

缺点

  • 安全风险(使用 sandbox)
  • 性能影响
  • SEO 考虑
  • 移动端兼容性