#javascript #html
#javascript #HTML
Вопрос:
Я пытаюсь получить данные из <object>
тега, используя JavaScript. Но при чтении я получаю приведенную ниже ошибку в Chrome:
Не удается прочитать свойство ‘body’, равное null
Но тот же код отлично работает в 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. первый шаг — выполнить
console.log(document.getElementById("data"))
, а затем проверить, в чем разница в обоих браузерах.2. Итак, разница в том, что в Chrome я просто получаю пустой тег object, а в Chrome я получаю этот тег с данными.
Ответ №1:
Вы можете просто использовать innerHTML
:
document.getElementById("data").innerHTML
<object />
Элемент будет содержать HTML-код, когда вы определяете источник — браузер отобразит HTML в нем. Таким образом, innerHTML просто будет работать, и вам не нужно беспокоиться о contentDocument и / или contentWindow. Это было необходимо, если вы использовали iframe
.
Ответ №2:
Вместо .contentDocument
вы могли бы использовать .contentWindow.document
, которое, похоже, работает в Chrome.
Кроме того, я бы не использовал .childNodes[0].innerHTML
, но .textContent
, потому что HTML может включать HTML-объекты (например, amp;>
когда ваш JSON имеет <
где-то), в то время как textContent
будет просто выдавать обычный текст.
Итак:
document.getElementById("data").contentWindow.document.body.textContent