Поскольку мы на несколько лет дальше первоначально принятого ответа, я хотел бы дать более современный ответ.
В Firefox 50.0.2 вы можете сделать это:
document.body = document.createElement("body");
document.body.innerHTML = "<p>Hello World!</p>";
Здесь тело создается и напрямую назначается «document.body».Некоторое чтение (https://html.spec.whatwg.org/multipage/dom.html#the-body-element-2) заставило меня понять, что атрибут документа "body" может быть либо "нулевым", либо содержать объект типа "body" или (не рекомендуется) "frameset".
Следующее не работает, т.е. создает пустую страницу, потому что отсутствует присвоение "document.body":
var body = document.createElement("body");
body.innerHTML = "<p>Hello World!</p>";
Вместо document.body = body;
вы можете сделать это: document.documentElement.appendChild(body);
, тогда как document.firstChild.appendChild(body);
выдает ошибку («HierarchyRequestError: Узел не может быть вставлен в указанную точку иерархии»).
Можно утверждать, является ли добавление абзаца путем оценки innerHTML лучшим способом, ноэто другая история.