Comments 10
Это связано с тем фактом, что если после схемы
К примеру, если написать в адресной строке
1. Присваивание
2. Замена кода документа на результат вычисленного выражения —
Кстати, шаг 2 является операцией перехода и отражается в истории (можно вернуться назад) — а первый шаг меняет текущую страницу.
При удаче можно даже увидеть, как одна надпись сменяет другую.
Причем такое «чудо» происходит при любой последовательности операторов, если последний из них является выражением. Чтобы защититься от такой «фичи», можно дописать в конец букмарклета
javascript:
указано выражение — его результат будет использован вместо html-кода.К примеру, если написать в адресной строке
javascript:'<div>text</div>'
— результат будет точно таким же. Встречая код вида javascript:document.body.textContent = '<div>text</div>'
, браузер (Mozilla Firefox — точно, остальные — не знаю) делает две операции:1. Присваивание
document.body.textContent = 'div>text</div>'
2. Замена кода документа на результат вычисленного выражения —
'<div>text</div>'
Кстати, шаг 2 является операцией перехода и отражается в истории (можно вернуться назад) — а первый шаг меняет текущую страницу.
При удаче можно даже увидеть, как одна надпись сменяет другую.
Причем такое «чудо» происходит при любой последовательности операторов, если последний из них является выражением. Чтобы защититься от такой «фичи», можно дописать в конец букмарклета
;void(0)
— в таком случае второго шага не происходит.Да, верно. Ложная тревога. Спасибо за объяснение.
Надо бы статью переписать, а может и удалить, за неимением стержня.
Ну или оставить ради генератора пароля.
Жёлтенько получилось.
Надо бы статью переписать, а может и удалить, за неимением стержня.
Ну или оставить ради генератора пароля.
Жёлтенько получилось.
А не подскажите, где можно почитать о том, почему происходит шаг 2?
Если бы еще я сам это знал…
Я тут нагуглил, кажется, некоторое задокументированное поведение. Не судите строго: JavaScript URIs.
Ну это же обычное поведение браузера.
При переходе по ссылке или вбивании чего-нибудь в адресную строку браузер просто берет контент по указанному протоколу (обычно это http(s)://, в данном случае — javascript:) и показывает в окне документа, заменяя его текущее содержимое. Разница лишь в том, как именно получается конечный контент.
При переходе по ссылке или вбивании чего-нибудь в адресную строку браузер просто берет контент по указанному протоколу (обычно это http(s)://, в данном случае — javascript:) и показывает в окне документа, заменяя его текущее содержимое. Разница лишь в том, как именно получается конечный контент.
Появилась идея для продолжения.
Кому интересно?
Кому интересно?
Sign up to leave a comment.
Особенность протокол javascript или генерация случайного пароля в закладке браузера