Javascript Bookmarklet: закодированный URI

У меня есть кусок кода, который должен открыть сайт.

javascript:(function(){var google = function(){window.location='http://google.de?q=%3D%3D'};google()}())

При вставке кода в консоль (Chrome) веб-сайт открывается и URI корректно кодируется.

Используя точно такой же код в букмарклете JS, он открывает веб-сайт, но с декодированным URI, что приводит к сбою моей целевой страницы.

Что я могу сделать, чтобы заставить работать букмарклет?

PS: в примере я использую уже закодированный URI, помещая encodeURI или же encodeURIComponent в букмарклет не помогло.

1 ответ

Решение

Специальные символы в URL декодируются при разборе URL.

Букмарклет - это URL.

Поэтому, когда букмарклет анализируется, специальные символы декодируются.

Это происходит до разбора URL-адреса внутри букмарклета, поэтому они уже декодируются при его разборе.

Вкратце: у вас есть URL внутри другого URL. Вам необходимо дважды закодировать специальные символы.

javascript:(function()%7Bvar%20google%20%3D%20function()%7Bwindow.location%3D'http%3A%2F%2Fgoogle.de%3Fq%3D%253D%253D'%7D%3Bgoogle()%7D())
Другие вопросы по тегам