的 name 和 value 必须成对显式写出,缺一不可;name 由插件定义,value 恒为字符串,浏览器仅原样传递;现代已弃用,但遗留系统排查需检查参数完整性、位置、大小写及重复问题。

param 的 name 和 value 必须成对出现,但写法有坑
name 和 value 是 <param> 唯一被 HTML5 保留的必需属性,缺一不可。浏览器会忽略没有 name 或没有 value 的 <param> —— 即使它语法合法(比如 <param name="autoplay">)。
常见错误写法:
-
<param name="autoplay">→ 缺少value,参数不生效 -
<param value="true">→ 缺少name,浏览器无法识别该参数用途 -
<param name="wmode" value="">→ 空字符串在某些插件中等价于未设置,不是“关闭”
正确写法只有一种:显式写出两个属性:<param name="autoplay" value="true">。XHTML 要求自闭合(<param name="..." value="...">),HTML5 允许省略斜杠,但建议统一用自闭合写法,避免解析歧义。
name 值不是随便起的,得看插件文档
name 的取值完全由嵌入对象(如 Flash、Java Applet、旧版 QuickTime 插件)定义,不是通用配置项。浏览器本身不解释这些名字,只是原样传给插件运行时环境。
典型例子:
-
movie:Flash 插件识别,指定 SWF 文件路径 -
wmode:Flash 识别,可取window/opaque/transparent -
quality:Flash 识别,影响渲染质量(high/low/autohigh) -
bgcolor:Flash 或 Java Applet 识别,设置背景色(如#000000)
如果写了 name="debug" 但插件根本不支持这个参数,它就只是个无效字符串,不会报错,也不会触发任何行为。查不到文档时,可 inspect 插件实例的 DOM,或翻旧版 SDK 手册 —— 现代浏览器已基本不提供这类调试支持。
value 类型是字符串,但插件可能做隐式转换
value 属性永远是字符串类型,即使你写 value="1" 或 value="false",传给插件的仍是字符串 "1" 和 "false"。是否转为布尔或数字,取决于插件内部逻辑。
这导致几个实际问题:
-
<param name="autoplay" value="1">和<param name="autoplay" value="true">在不同插件里效果可能不同 -
value="0x0000FF"这种十六进制写法,只有部分插件能自动识别为颜色值 - 含空格或引号的值必须用双引号包裹:
value="my plugin title",否则 HTML 解析失败
特别注意:value 中不能直接写 HTML 实体或 JS 表达式。像 value="&id=123" 会被解码为 &id=123,而 value="%{user.id}" 是 Struts2 的 <param> 语法,和原生 <param> 无关 —— 混用会导致参数传空。
现代开发中几乎不用 param,但遗留系统排查绕不开
当前主流浏览器已禁用 NPAPI 插件(Flash、Java、Silverlight),<object></object> + <param> 组合基本失效。新项目用 <video></video>、<audio></audio>、Web Components 或 JS 配置替代。
但如果你在维护老系统,遇到功能异常,优先检查三件事:
- 目标插件是否仍在浏览器白名单内(Chrome 从 v88 起彻底移除 NPAPI)
-
<param>是否放在<object></object>开始标签和结束标签之间(位置错则参数不传递) - 拼写大小写是否匹配插件要求(有些插件严格区分
WMode和wmode)
最隐蔽的问题:多个同名 name 参数,浏览器只取第一个,后续被忽略 —— 这类问题在动态生成 HTML 时容易漏检。











