问题描述
我正在尝试使用 JavaScript 从<object>
标签中获取数据。
但是在阅读时,我在 Chrome 中收到以下错误:
无法读取 null 的属性“body”
但是相同的代码在 Firefox 中运行良好。 下面是我的代码:
<body onload="init()">
<object id="data" data="graph.json" type="text/plain" style="display:none"></object>
</body>
<script>
var init = function(){
var json = document.getElementById("data").contentDocument.body.childNodes[0].innerHTML;
var graph = JSON.parse(json);
}
</script>
所以document.getElementById("data").contentDocument.body.childNodes[0].innerHTML
给出了错误。
1楼
您可以简单地使用innerHTML
:
document.getElementById("data").innerHTML
<object />
元素将在您定义源时保存 html - 浏览器将在其中呈现 html。
因此,innerHTML 可以正常工作,您无需担心 contentDocument 和/或 contentWindow。
如果您使用iframe
则需要这个。
2楼
取而代之的.contentDocument
,你可以使用.contentWindow.document
,这似乎是工作在Chrome。
另外,我不会使用.childNodes[0].innerHTML
,而是.textContent
,因为 HTML 可能包含 HTML 实体(例如>
当您的 JSON 有<
某处时),而textContent
只会提供纯文本。
所以:
document.getElementById("data").contentWindow.document.body.textContent