2013-03-08 10 views
5

ho questo piccolo bookmarklet:Perché l'aggiunta a innerHTML in un bookmarklet sovrascrive l'intera pagina?

javascript:document.getElementsByTagName("div")[0].innerHTML+="Chuck Norris"; 

Ora è ovviamente dovrebbe a prendere la prima div sulla pagina, e aggiungere Chuck Norris in esso.

Invece, quando incollato sulla barra degli indirizzi, Chuck Norris sovrascrive la pagina.

Perché è così?

Nota: questo non si verifica in Safari ...

+0

Non fa quello che dici su Chrome/Win, quando inserito nella console JS. (L'accesso alla barra degli indirizzi non funziona perché Omnibox). – millimoose

+1

Non sono sicuro del motivo per cui questo è downvoted. Sta sostituendo lo schermo per me su Chrome. – Malk

+0

Grazie, @millimoose ... Non sapevo che l'Omnibox avrebbe fatto questo ... e perché? – seanlevan

risposta

5

Non si sta annullando l'azione. aggiungi vuoto 0; per poi finire.

javascript:document.getElementsByTagName("div")[0].innerHTML+="Chuck Norris";void 0; 
+1

Apparentemente c'è un sacco di raccomandazioni da seguire per i bookmarklets: http://subsimple.com/bookmarklets/rules.asp – millimoose

+0

perché è necessario void()? – seanlevan

+0

grazie per la risposta! :) e qual è la differenza da void e return false? – seanlevan

-1

Non sono sicuro di quale sia il problema esatto è, ma ho preso a lavorare facendo una TextNode e aggiungendo che:

javascript:var d=document.getElementsByTagName("div")[0];var n=document.createTextNode("Chuck Norris");d.appendChild(n);