IE中template标签完全不支持:IE10及以下无法识别该标签,document.querySelector('template')返回null;IE11虽解析标签但content属性为undefined,无法使用cloneNode(true),必须降级为script模板或手动重建。

template标签在IE中完全不生效,连DOM节点都创建不出来
IE10及以下版本压根不认识<template>标签,既不会解析内容,也不会把它挂进DOM树——document.querySelector('template')返回null,document.querySelectorAll('template').length是0。这不是样式问题,是根本“看不见”。IE11开始支持,但存在一个关键陷阱:它只支持<template>语法,不支持content属性的现代用法(比如template.content.cloneNode(true)在IE11里会报undefined is not an object)。
- 别指望条件注释加载polyfill——
<!--[if lt IE 11]>对<template>无效,因为IE10及以下连标签名都不识别 - IE11中必须用
template.innerHTML+document.createElement手动重建内容,不能依赖content - 若项目仍需支持IE11,建议把模板逻辑降级为
<script type="text/template">,用innerHTML提取后DOMParser或insertAdjacentHTML注入
@supports无法检测template支持性,必须用JS运行时判断
@supports规则对<template>完全无效,因为它是HTML标签而非CSS属性。写@supports (display: contents) { ... }或@supports selector(:has()) { ... }都和<template>无关。真正可靠的检测方式只有两个:
- 查构造函数:
typeof HTMLTemplateElement !== 'undefined'——这是最准的,IE10返回undefined,IE11+返回function - 查实例属性:
document.createElement('template').content !== undefined——IE11返回false(实际是undefined),Chrome/Firefox/Safari返回DocumentFragment - 别用
'content' in document.createElement('template'),Safari 15.4之前会返回false误判
移动端WebView的template行为差异极大
Android 4.4–6.0的系统WebView、旧版iOS UIWebView(iOS 9及以下)对<template>的支持是残缺的:能解析标签,但content为空或不可克隆;部分版本甚至会把<template>内容提前渲染出来(破坏“惰性”语义)。更麻烦的是,微信内置浏览器(X5内核)、QQ浏览器(QX内核)早期版本会静默忽略<template>,连querySelector都找不到。
- 真机测试必须覆盖:Android 5.1 WebView、iOS 10 UIWebView、微信7.0.20内核、QQ浏览器10.7
- 检测时不要只看
querySelector是否存在,要执行template.content.childNodes.length确认内容是否真实挂载 - 避免在
<template>里放<script>或<style>——老WebView可能提前执行或漏解析
服务端渲染(SSR)环境下template标签会被当作普通HTML输出
Node.js模板引擎(如EJS、Nunjucks)或PHP直接输出HTML时,<template>标签没有任何特殊处理,只是原样吐到页面上。这本身没问题,但容易引发两个坑:
立即学习“前端免费学习笔记(深入)”;
- 如果服务端代码里写了
<template><div>{{data.name}}</div></template>,而前端JS又用template.content.innerHTML读取,那服务端变量未渲染会导致JS拿到空字符串 - Next.js / Nuxt等框架的静态生成(SSG)默认不执行客户端JS,
<template>内容始终不可见,除非明确用useEffect或onMounted触发克隆 - Vue/React中使用
<template>需注意:Vue 3的<template>是编译指令,和HTML原生<template>冲突,混用会导致解析错乱
<template>被嵌套在自定义元素、Shadow DOM或微前端子应用里时,WebKit旧版本和某些企业内网浏览器的组合行为几乎无法预测。实操中,宁可多写几行降级逻辑,也别假设content.cloneNode(true)在所有环境都安全。



















