问题描述
我正在尝试使用 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