Zauważyłem ,że kiedy do linijki w IE dopiszę na końcu alert(); to wszystko działa (z wyjątkiem efektu ubocznego w postaci wyskakującego okienka). Ale jaja!
javascript:document.body.appendChild(document.createTextNode("tekst"));alert("");
więc nie wykonujesz tego kodu w konsoli ale w pasku adresu?
W takim razie cała strona zmienia się na to zwróci to wyrażenie wpisane w pasku adresu - gdybyś miał na tej stronie coś więcej to byś zauważył różnicę
Równie dobrze mógłbyś napisać:
javascript:"tekst"
różnica między firefoxem a IE jest taka że jeśli wyrażenie w pasku adresu dla firefoxa będzie czymś innym niż stringiem to firefox nie podmienia strony, a IE wywołuje metodę .toString()
i podmienia
jako że funkcja appendChild
zwraca dodany element (w tym przypadku textNode) a instrukcja:
document.createTextNode("tekst").toString();
zwraca [object Text]
to właśnie taki napis pojawia się zamiast całej strony w IE
firefox natomiast nie podmienia strony bo zwrócony typ nie jest stringiem
żeby strona się nie zmieniła na to co zwróci wyrażenie, wyrażenie musi nic nie zwracać (void
)
właśnie typ void
zwraca funkcja alert
, dlatego w obu przeglądarkach kod działa
jeżeli tworzysz tzw. bookmarklet
czyli kod do wywołania w pasku adresu (z zakładki) to na jego końcu po prostu dodaj ;void(0)
jeżeli nie - to nie testuj kodu w pasku adresu