2016-12-16 7 views
2

Это не дублирует вопрос по этим причинам:Как перезаписать весь документ с JavaScript

  • Я спрашиваю о том, как заменить весь HTML-документ с JavaScript без JQuery или любых других фантазий расширений JavaScript , Некоторые из других вопросов, которые похожи на этот вопрос, касаются конкретных вещей, таких как AJAX или jQuery.
  • Я не спрашиваю о том, почему document.write() только присоединяется к странице. Возможно, чистое решение JavaScript, которое я ищу, может включать эту функцию, но это может быть не только потому, что оно само по себе неадекватно.

Что я хочу сделать, это переписать веб-страницу, поскольку она отображается в браузере только с HTML. Функция document.write() только добавляет любой аргумент, передаваемый ему в тело документа. Свойство document.documentElement.outerHTML может быть прочитано, но в отличие от того, когда оно используется на дочерних элементах страницы, невозможно записать, и даже если бы это было возможно, это оставило бы DOCTYPE нетронутым.

Я работаю над букмарклетом, поэтому этот JavaScript не будет запущен на странице, то есть нет проблем с перезаписью скрипта во время его работы. Его также можно запустить в инструментах разработчика браузера.

В качестве примера предположим, что в моем браузере открыт about:blank. Содержимое DOM будет выглядеть следующим образом:

<html> 
    <head></head> 
    <body></body> 
</html> 

Я хочу, чтобы иметь возможность переписать его с любой строкой я хочу. Так, например, я мог бы сделать его выглядеть следующим образом:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title>Example</title> 
    </head> 
    <body> 
     <p>This is an example.</p> 
    </body> 
</html> 

Как я могу добиться такого рода перезапись документа?

+0

Из того, что я вижу, единственный способ сделать это - изменить каждый раздел. Я бы предположил, возможно, подумав о том, как реорганизовать ваш код. – Jhecht

ответ

0

Вы можете использовать document.implementation.createDocumentType переписать доктайп и document.getElementsByTagName получить элементы DOM, а затем переписать с innerHTML и setAttribute.

var newDoctype = document.implementation.createDocumentType('html','-//W3C//DTD XHTML 1.0 Transitional//EN','http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdd'); 
 
    document.doctype.parentNode.replaceChild(newDoctype,document.doctype); 
 
    document.getElementsByTagName('html')[0].setAttribute('xmlns', 'http://www.w3.org/1999/xhtml'); 
 

 

 
var doc = document.getElementsByTagName('html')[0]; 
 
    doc.getElementsByTagName('head')[0].innerHTML = '<title>Example</title>'; 
 
    doc.getElementsByTagName('body')[0].innerHTML = '<p>This is an example.</p>';
<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
    </head> 
 
    <body> 
 
    </body> 
 
</html>

Edit:

Обновлено включить комментарии по Xweque и Xmlns атрибут.

+0

Нет. Это невозможно использовать для перезаписи всего документа. Во-первых, он оставляет DOCTYPE нетронутым. – Melab

+0

Зачем вам нужно переписывать doctype? – mhatch

+0

http://stackoverflow.com/questions/3147750/how-can-i-change-the-doctype –

Смежные вопросы