的 height 属性常不生效,因其仅为建议值,实际尺寸由嵌入内容(如插件)控制;现代浏览器已弃用插件生态,应改用 、pdf.js 等标准化方案。

为什么 <embed></embed> 的 height 属性有时不生效
直接写 <embed src="video.mp4" height="400"></embed> 很可能没效果,尤其在现代浏览器中。根本原因是:<embed></embed> 是个“外部内容承载器”,它的尺寸最终由嵌入内容(如 Flash、PDF、本地播放器插件)自身控制,HTML 层面的 height 只是建议值,且容易被 CSS 或插件内部逻辑覆盖。
常见表现包括:视频只显示黑屏一小块、PDF 渲染区域被截断、高度随窗口缩放异常跳变。
- Chrome 84+ 和 Firefox 70+ 已基本弃用插件生态(如 NPAPI),
<embed></embed>对非标准 MIME 类型(如application/x-shockwave-flash)会直接拒绝加载 - 即使加载成功,某些 PDF 插件(如旧版 Adobe Reader Browser Plugin)会忽略
height,强制按页面比例缩放 - 移动端 Safari 完全不支持
<embed></embed>加载本地插件,height形同虚设
用 style 替代 height 属性更可靠
把尺寸控制权交给 CSS,能绕过多数插件对 HTML 属性的忽略逻辑。关键是:必须同时设置 width 和 height,且避免使用 auto 或百分比(除非父容器有明确尺寸)。
正确写法示例:
<embed src="report.pdf"
type="application/pdf"
style="width: 100%; height: 600px; border: none;"
id="pdf-embed">
-
width: 100%允许响应式宽度,但height必须是固定像素值(如600px),否则 PDF 插件可能回退到默认高度(常为 200px) - 加
border: none是为了消除部分浏览器默认边框导致的尺寸偏差 - 不要写
style="height: 100%;"—— 若父容器无显式高度,它会坍缩为 0
当需要动态调整高度时,别依赖 embed 自身 API
<embed></embed> 几乎没有标准化的 JS 接口来读取或设置实际渲染高度。所谓 “获取 PDF 页面高度” 或 “根据内容撑开” 都得绕道:
- 对 PDF:改用
pdfjs-dist库 +<canvas></canvas>渲染,再通过PdfPage.getViewport()算出真实像素高度 - 对视频/音频:优先用原生
<video></video>或<audio></audio>标签,它们支持height、width和完整的resize事件 - 若必须用
<embed></embed>(如遗留系统调用特定 ActiveX 控件),只能靠定时轮询offsetHeight并手动修正 —— 但成功率低,且易触发重排
现代替代方案比硬调 height 更值得投入
继续折腾 <embed></embed> 的 height 属性,本质是在维护一个已淘汰的技术路径。真正稳定的解法是迁移:
- PDF 文档 → 用 pdf.js 渲染到
<canvas></canvas>或<div>,完全可控高度和缩放 <li>音视频 → 改用 <code><video controls></video>,支持aspect-ratioCSS 属性自动维持比例 - 自定义插件(如硬件设备 SDK)→ 要求厂商提供 WebAssembly 或 WebSocket 接口,而非依赖浏览器插件机制
真正难的不是怎么设 height,而是判断当前场景是否还值得用 <embed></embed> —— 大部分情况下,答案是否定的。


















