如何在JavaScript中添加元标签

61
我想为特定页面添加 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 标签。但是我的页面在一个 HTML 标签内被渲染,只有点击不同模板时才会更改内容。因此,我无法在 <HEAD> 部分添加 <meta> 标签。
是否有办法使用 JavaScript 添加 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 标签?

你不能使用JavaScript来做meta标签。你可以将标签添加到模板中,或者从HTTP服务器设置标头。 - Pointy
我相信这个问题已经在这里得到了解答:https://dev59.com/s1rUa4cB1Zd3GeqPiEW6 - Tim Sheehan
@Dontfeedthecode 我非常怀疑那个答案是否真的有效。 - Pointy
@Dontfeedthecode:并且依赖于jQuery,这个问题没有提到。 - T.J. Crowder
5个回答

92

你可以将它添加:

var meta = document.createElement('meta');
meta.httpEquiv = "X-UA-Compatible";
meta.content = "IE=edge";
document.getElementsByTagName('head')[0].appendChild(meta);

我不会感到惊讶,如果在运行代码时,浏览器已经做好了如何渲染页面的决定。

真正的解决方案是从服务器端开始就输出正确的标签。(遗憾的是,如果需要支持IE浏览器,你不能只是不使用标签。 :-| )


4
我可以确认,在IE8中动态添加meta标签是不起作用的。 - plalx
我已经成功地通过使用 document.write 替换整个文档内容来强制使用 Quirks 而不是 IE 7 Standards。也许在 IE8 中有一种方法可以创建一个新的文档对象,并用该新文档替换当前文档,这样就可以触发文档模式的重新评估。createDocument 函数在 IE8 中不可用,但我想我们可以依靠一个 iframe 来创建一个新的文档实例。 - plalx
IE太烂了。在IE中没有用,因为一旦页面渲染开始,如果没有指定任何东西或存在冲突,IE就会站在死人IE7的一边。 - sampopes
我可以使用 document.head.appendChild() 吗? - marcellothearcane
1
@marcellothearcane - 如果你的浏览器支持,那是可以的。我认为现代浏览器都支持。 - T.J. Crowder

23
$('head').append('<meta http-equiv="X-UA-Compatible" content="IE=Edge" />');
或者
var meta = document.createElement('meta');
meta.httpEquiv = "X-UA-Compatible";
meta.content = "IE=edge";
document.getElementsByTagName('head')[0].appendChild(meta);

虽然我不能确定它会产生影响,因为它将在页面加载后生成

如果您想为页面添加元数据标签以供描述,请使用DNN页面的设置添加描述和关键字。此外,在修改HEAD时的最佳方式是通过第三方模块动态将代码注入到HEAD中。

来源:http://www.dotnetnuke.com/Resources/Forums/forumid/7/threadid/298385/scope/posts.aspx

如果你运气好的话,这可能会允许其他元标记

可以将其他HEAD标记放置在“页面设置”>“高级设置”>“页面头标记”中。

来源:http://www.dotnetnuke.com/Resources/Forums/forumid/-1/postid/223250/scope/posts.aspx


11

像这样吗?

<script>
var meta = document.createElement('meta');
meta.setAttribute('http-equiv', 'X-UA-Compatible');
meta.setAttribute('content', 'IE=Edge');
document.getElementsByTagName('head')[0].appendChild(meta);
</script>

1
你不需要使用 setAttribute 来实现这个,httpEquivcontent 都是反射的 - T.J. Crowder

8

如@marcellothearcane所指定的,对于现代浏览器,您还可以使用以下方法:

var meta = document.createElement('meta');
meta.httpEquiv = "X-UA-Compatible";
meta.content = "IE=edge";
document.head.appendChild(meta);

此处支持的浏览器:document.head


1

尝试

document.head.innerHTML += '<meta http-equiv="X-UA-..." content="IE=edge">'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接