<param>标签必须嵌套在<object>内部才生效,仅对直接父级<object>有效;放在外部或<embed>内均被浏览器忽略,且需匹配插件要求的name值、正确设置type属性,并注意现代浏览器已基本弃用NPAPI插件支持。

param 标签必须嵌套在 object 内部才生效
<param> 不是独立标签,它只对直接父级的 <object> 生效。放在 <object> 外面、或嵌套在 <embed> 里都无效。浏览器会忽略这些位置的 <param>。
常见错误是把 <param> 放在 <object> 之后、或当成 <embed> 的子元素——此时参数根本不会传给插件。
- 正确写法:
<object><param name="xxx" value="yyy"></object> - 错误写法:
<object></object><param>或<embed><param></embed> - 如果同时用了
<embed>(作为 fallback),它的参数得用name="xxx"属性直接写在标签上,比如<embed src="x.swf" flashvars="a=1&b=2">
name 和 value 必须匹配插件期望的参数名
不同插件识别的 name 值完全不同。Flash 插件认 movie、flashvars;Java applet 认 code、archive;PDF 插件可能认 src 或 filename。传错名字等于没传。
查文档是唯一可靠方式。比如 Flash 中:
立即学习“前端免费学习笔记(深入)”;
-
<param name="movie" value="demo.swf">—— 指定 SWF 文件路径 -
<param name="flashvars" value="user=john&lang=zh">—— 传 URL 编码的键值对 -
<param name="wmode" value="transparent">—— 控制窗口模式
注意:value 中含特殊字符(如 &)必须手动 URL 编码,浏览器不会自动处理。
object 的 type 和 data 属性影响 param 是否被读取
如果 <object> 的 type 声明了 MIME 类型(如 application/x-shockwave-flash),浏览器会优先按该类型解析 <param>;但如果只写了 data 而没写 type,部分浏览器(尤其是旧版 IE)可能跳过 <param> 解析,直接加载 data 指向的资源,导致参数丢失。
- 稳妥做法:同时指定
type和data,且type与插件实际注册的 MIME 类型一致 - IE 下尤其要注意:若
type错误(比如写成text/html),<param>完全不生效 - 现代浏览器对
type宽松些,但兼容性要求高时仍需严格匹配
param 在不同浏览器中的行为差异依然存在
Chrome 84+ 和 Firefox 已逐步弃用 NPAPI 插件支持,<object> + <param> 对 Flash/Java 等已基本失效。目前仅少数遗留系统(如内网 IE11、Edge IE 模式)还依赖这套机制。
如果你的目标环境明确是现代浏览器,这条路大概率走不通——不是写法问题,而是底层支持没了。
真正容易被忽略的是:即使 HTML 结构完全正确,只要插件本身不响应某个 name,或者插件版本不支持该参数(比如旧版 Flash Player 不识别 allowScriptAccess 的某些值),<param> 就只是摆设。调试时得看插件日志,不能只靠 DOM 检查。



















