object 标签的 form 属性在主流浏览器中均不支持,属于未实现的纸面标准;必须通过 JavaScript 拦截 submit 事件、手动读取状态并注入隐藏字段来实现表单提交。

object 标签的 form 属性在绝大多数实际项目中无法可靠使用——主流浏览器(Chrome、Firefox、Safari、Edge)均不支持它。
为什么 form 属性基本不可用
HTML5 规范确实定义了 object 的 form 属性,允许将表单外的 object 元素显式关联到某个 <form id="xxx">。但现实是:
- 所有现代浏览器解析时会忽略该属性,既不将其纳入表单提交数据,也不在
form.elements或form.querySelectorAll('object')中暴露 - 即使设置了
form="myform",调用document.getElementById('myform').submit()也不会触发object内部插件(如旧版 Flash 或 ActiveX)的任何表单行为 - 该属性从未进入浏览器实际实现阶段,仅停留在规范文本中,属于“纸面标准”
想让 object 参与表单提交?只能靠 JavaScript 拦截
如果你嵌入的是可交互内容(比如一个自定义控件、SVG 表单区域、或遗留 Java Applet),且需要它“贡献”数据到表单提交中,唯一可行路径是手动绑定:
- 监听表单的
submit事件,阻止默认行为:event.preventDefault() - 从
object元素上读取状态(例如通过object.contentWindow访问内嵌 HTML,或调用其暴露的 JS 方法如obj1.getValue()) - 将获取到的值动态插入隐藏字段:
<input type="hidden" name="custom_data" value="..."> - 再调用
form.submit()发起原生提交
注意:这要求你对嵌入内容有完全控制权,能确保它提供 JS 接口;纯 PDF 或静态 SVG 不支持此类交互。
立即学习“前端免费学习笔记(深入)”;
object 里放 input 或其他表单控件?别这么做
试图在 object 内部直接写 HTML 表单元素(如 <input type="text">)是无效的——object 加载外部资源后,其内部 DOM 是隔离的(尤其当 type="text/html" 时,相当于一个沙盒 iframe)。你无法:
- 用 CSS 选择器直接选中它内部的
input - 让它的
input自动被父表单收集(form.elements完全不可见) - 保证其
name属性参与序列化(form.serialize()或FormData都无视它)
若需嵌入可编辑内容,优先用 <iframe> + srcdoc,或直接用 <div contenteditable> 配合 JS 管理状态。
真正容易被忽略的一点:很多开发者看到 HTML5 规范写了 form 属性,就默认它“应该可用”,结果在测试阶段才发现表单提交漏数据。务必在目标浏览器中用 console.dir(form.elements) 实际验证——只要没出现在列表里,就说明它没被识别为表单控件。



















