2016-10-08 3 views
0

Я хотел бы переписать содержимое <html> с помощью Greasemonkey.Запишите <html> содержание

Я попытался это:

document.open() 
document.write(html) 
document.close() 

Не работает.

document.body.innerHTML = html только заменяет содержимое.

Некоторые предложения?

ответ

2

Не использовать document.write(). Он имеет все виды ограничений безопасности (из-за злоупотребления плохими парнями) и составляет fraught with pitfalls.

если вы попытаетесь использовать его, как в своем вопросе, в usercript; Firefox, как правило, либо полностью останавливает страницу, либо переходит в постоянный Connecting..., а затем перезагружает цикл - в зависимости от того, когда запускается ваш сценарий, и используете ли вы unsafeWindow.stop().
Этот вид кода по-прежнему работает в Chrome (на данный момент), но остается плохой практикой. Не уверен в других браузерах.

Правильный подход заключается в использовании методов DOM. Например:

var D  = document; 
var newDoc = D.implementation.createHTMLDocument ("My new page title"); 
window.content = newDoc; 

D.replaceChild (
    D.importNode (newDoc.documentElement, true), 
    D.documentElement 
); 

D.body.innerHTML = '<h1>Standby...</h1>'; 

Для повышения производительности, вы можете также использовать:

// @run-at  document-start 
// @grant  unsafeWindow 

, а затем поместить unsafeWindow.stop(); в верхней части кода userscript.




Re: "How do I rewrite the head content with this solution?":

Этот пример уже переписывает <head>. Новая голова будет:

<head><title>My new page title</title></head> 

в этом случае.

Для добавления дополнительных элементов головки, используйте DOM код, как:

var newNode  = D.createElement ('base'); 
newNode.href = "http://www.example.com/dir1/page.html"; 
var targ  = D.getElementsByTagName ('head')[0]; 
targ.appendChild (newNode); 

За исключением:

  1. Просто используйте GM_addStyle() легко создавать <style> узлы.
  2. Добавление <script> узлов почти всегда бессмысленно в вашем сценарии. Просто сделайте свою учетную запись необходимой обработкой JS.
  3. Некоторые теги, такие как <meta>, будут добавлены, но не обработаны (особенно в Firefox). В зависимости от параметров они обрабатываются только при начальной загрузке с сервера.
+0

Как переписать содержимое главы с помощью этого решения? – mykiwi

+0

@mykiwi Просто запустите код. HTML, который вы хотите, находится в 'D.body.innerHTML = '

Резервный ...

'; '. –

+0

@mykiwi, см. Обновленный ответ. –

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