object标签不支持直接传json对象,需用json.stringify()序列化后替换双引号为单引号再拼入param的value属性;现代方案应改用data-*属性配合js解析。

object 标签本身不支持直接传 JSON 对象
<object></object> 是用于嵌入外部资源(如 Flash、PDF、SVG)的容器,它的 data 和 type 属性只接受字符串值,<param> 的 value 也强制转为字符串。你写 <param name="config" value="{id:" name:> 是无效的——JS 对象会变成 [object Object],根本传不进去。
必须用 JSON.stringify() + 单引号转义拼接到 HTML 字符串中
如果是在 JS 动态生成 <object></object> 标签(比如通过 innerHTML 或模板字符串),且需要把配置以字符串形式透传给内部插件或 Flash(已淘汰但仍有遗留系统),就得手动序列化:
- 先
JSON.stringify()得到合法 JSON 字符串,例如{"id":1,"name":"test"} - 再把双引号替换成单引号,避免和 HTML 属性引号冲突:
.replace(/"/g, "'") - 最后拼进
<param>的value中,例如:<param name="config" value='{"id":1,'>
注意:内部脚本(比如 Flash 的 ActionScript 或旧版 JS 插件)需自行调用 JSON.parse() 解析,浏览器不会自动处理。
现代替代方案:别用 object 标签传参数,改用 data-* 属性 + JS 初始化
Flash 已全面弃用,PDF/SVG 嵌入也早有更可控的方式(<iframe></iframe>、<embed></embed>、原生 <svg></svg>)。真正需要传结构化配置时,推荐:
- 在
<div id="my-widget"> 上加 <code>data-config属性:<div id="my-widget" data-config='{"theme":"dark","items":[1,2,3]} '></div> - JS 中读取并解析:
const config = JSON.parse(document.getElementById('my-widget').dataset.config); - 这样既规避了
<object></object>的限制,又保持语义清晰、调试方便、无 MIME 类型兼容问题
dataTransfer 不是 object 标签的机制,别混淆
有人搜 “HTML object 传 JSON” 时实际想的是拖放(dataTransfer),但那是 dragstart/drop 事件的 API,和 <object></object> 标签完全无关。如果你看到 dataTransfer.setData('application/json', JSON.stringify(obj)) 这类代码,它作用于拖拽过程,不是嵌入对象的参数传递方式。
真正用 <object></object> 的场景已经极少了;只要不是维护十多年前的 Flash 系统,就该用 data-* 属性 + JS 初始化代替——否则光是引号嵌套、空格截断、特殊字符转义就够调试半天。











