【问题标题】:Can't set a new innerHTML for an element with JS in .HTA page无法在 .HTA 页面中为带有 JS 的元素设置新的 innerHTML
【发布时间】:2018-04-17 20:38:12
【问题描述】:

我正在尝试为我的 .HTA 页面的 head 元素设置一个新的 innerHTML 属性,例如:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Some title</title>
</head>
<body>
<script>
var headHTML = document.getElementsByTagName('head')[0].innerHTML;
var headHTML = headHTML.replace('Some','Another');
document.getElementsByTagName('head')[0].innerHTML = headHTML;
</script>
</body>
</html>

但我得到了错误:

无法设置 innerHTML 属性。无效的目标元素 操作。

为什么以及如何解决问题?

ps。标题只是一个例子。我需要替换 head 和 body 中不同元素的 innerHTML。

【问题讨论】:

标签: javascript wsh hta


【解决方案1】:

这是比 HTA 问题更具体的 IE 问题。在 IE 中,headtitle 元素中的 innerHTML 是只读的 (among some other elements)。但是,可以将元素附加到 head。例如,创建一个链接元素以将样式表添加到文档:

var elem = document.createElement('link');
elem.rel = 'stylesheet';
elem.type = 'text/css';
elem.href = '....';
document.documentElement.appendChild(elem);

appendChild 方法也可用于向document.body 添加元素。

请参阅 MDN 上的 createElementappendChild

【讨论】:

  • 实际上,document.getElementsByTagName('head')[0].innerHTML += '&lt;some code&gt;' 在 IE11 中有效,但在 IE9 或更低版本中无效。我刚刚测试过了
  • 嗯,MS 文档说 head 元素的内部 html 是只读的……那么重新定义整个 head 有什么意义呢?请注意,+= 不是附加运算符,它重新定义了它的操作数。
【解决方案2】:

您是否尝试将您的JS 放入

<script language="javascript">

</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多