2013-03-08 2 views
5

Ich habe diese kleine Bookmarklet:Warum überschreibt das Anhängen an innerHTML in einem Bookmarklet die gesamte Seite?

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

Jetzt ist es offensichtlich sollte die ersten div auf der Seite nehmen, und Chuck Norris in hinzufügen.

Stattdessen, wenn in der Adressleiste eingefügt, überschreibt Chuck Norris die Seite.

Warum ist das so?

Hinweis: Dies tritt nicht auf Safari ...

+0

Es macht nicht das, was Sie in Chrome/Win sagen, wenn Sie in die JS-Konsole eingegeben werden. (Die Eingabe in die Adressleiste funktioniert nicht, weil Omnibox.) – millimoose

+1

Ich bin mir nicht sicher, warum dies abgelehnt wird. Es ersetzt den Bildschirm für mich in Chrome. – Malk

+0

Danke, @millimoose ... War mir nicht bewusst, dass die Omnibox dies tun würde ... und warum? – seanlevan

Antwort

5

Sie brechen die Aktion nicht ab. füge void 0 hinzu; um dann zu enden.

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

Anscheinend gibt es eine ganze Reihe von Empfehlungen für Bookmarklets: http://subsimple.com/bookmarklets/rules.asp – millimoose

+0

Warum ist void() notwendig? – seanlevan

+0

danke für deine antwort! :) und was ist der unterschied von void und return false? – seanlevan

-1

Ich bin nicht sicher, was genau das Problem ist, aber ich habe es funktioniert, indem eine textNode machen und es anhängt:

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