Невозможно установить свойство InnerHTML null

У меня простая html-страница без кода в теге body. Я хочу вставить html в тег body через javascript.

Мой файл javascript выглядит следующим образом.

var Global={
    UserWall:function(){
          return "a very long html code";
   }
};

    var globalObject=Object.create(Global);
   document.getElementsByTagName("body").item(0).innerHTML=globalObject.UserWall();

Теперь я хочу, чтобы этот очень длинный html-код был автоматически вставлен в тег body при загрузке страницы. Но это дает мне ошибку, о которой я упоминал в заголовке. Почему?

а также это правильный способ создания веб-сайта на основе ajax (без перезагрузки страницы), что означает, что если я позвонил стороне сервера script, чтобы обновить этот очень длинный html-код и добавил его в тело страницы.

Ответ 1

Вы почти наверняка используете свой код перед построением DOM. Попробуйте запустить код в функции window.onload (но см. Примечание ниже):

window.onload = function() {
    // all of your code goes in here
    // it runs after the DOM is built
}

Еще одно популярное кросс-браузерное решение - разместить ваш блок <script> непосредственно перед закрывающим тегом </body>. Это может быть лучшим решением для вас, в зависимости от ваших потребностей:

<html>
  <body>

    <!-- all of your HTML goes here... -->

    <script>
        // code in this final script element can use all of the DOM
    </script>
  </body>
</html>
  • Обратите внимание, что window.onload будет ждать загрузки всех изображений и подкадров, что может занять много времени после создания DOM. Вы также можете использовать document.addEventListener("DOMContentLoaded", function(){...}), чтобы избежать этой проблемы, но это не поддерживается кросс-браузером. Тонкий снимок - это кросс-браузер и запускается, как только DOM завершается.

Ответ 2

Я сделал все упомянутые решения. но они не работали, пока я не сделал это с помощью JQuery:

на моей странице HTML:

> <div  id="labelid" > </div>

и когда я нажимаю кнопку, я помещаю это в свой JS файл:

$("#labelid").html("<label>Salam Alaykom</label>");

Ответ 3

Выполняется ли это в <head> html? Если это так, вы должны убедиться, что тег <body> загружен первым.

Вам нужно использовать обработчик onload, например: http://javascript.about.com/library/blonload.htm

Ответ 4

возможно, это сработает: document.getElementsByTagName("body")[0].innerHTML