使用 Javascript 访问 <noscript> 的内容
-
05-07-2019 - |
题
<noscript><div id="example">I want to get this innerHTML</div></noscript>
<script type="text/javascript"> alert($('example').innerHTML);</script>
此 JavaScript 片段仅返回一个空字符串。有没有办法获取 noscript 节点的内容?
附注我在这个特定项目中使用原型。
解决方案
如果启用了脚本,则 noscript元素定义为仅包含文本 - 虽然它必须是可解析的文本,但对内容有一些限制。考虑到这一点,您应该能够提取文本,解析它,然后找到您想要的元素。以下是一个基本的例子:
var nos = document.getElementsByTagName("noscript")[0];
// in some browsers, contents of noscript hang around in one form or another
var nosHtml = nos.textContent||nos.innerHTML;
if ( nosHtml )
{
var temp = document.createElement("div");
temp.innerHTML = nosHtml;
// lazy man's query library: add it, find it, remove it
document.body.appendChild(temp);
var ex = document.getElementById("example");
document.body.removeChild(temp);
alert(ex.innerHTML);
}
请注意,当我最初撰写此答案时,上述操作在Google Chrome中失败了;这些天对noscript内容的访问似乎有点得到了更好的支持,但它仍然让我感到极为震撼,因为它可能比其他元素更容易出现错误 - 如果你有其他选择,我会避免它。
其他提示
我不确定原型,但这可以在Chrome中使用jQuery:
$('noscript').before($('noscript').text());
来自 HTML 4.0 规范:
NOSCRIPT 元素允许作者在脚本未执行时提供替代内容。NOSCRIPT 元素的内容只能在以下情况下由脚本感知的用户代理呈现:
- 用户代理配置为不评估脚本。
- 用户代理不支持文档前面的 SCRIPT 元素调用的脚本语言。
在我看来,这意味着如果在浏览器中启用了脚本,则 NOSCRIPT 标记的全部内容(在本例中为您的 div)将被完全忽略。您是否已验证在您的情况下“示例”div 是否可以通过 DOM 访问?
使用Firefox 3.0.7,Safari 3.2.2和MSIE 7.0.5730.13(所有在WinXP SP3上)进行测试,似乎
然而,可以访问&lt; noscript&gt;
元素本身,然后使用DOM方法更改其子元素。
使用jQuery尝试$($(&quot; noscript&quot;)。text())。
不隶属于 StackOverflow