Javascript Bookmarklet: закодированный URI - PullRequest
0 голосов
/ 11 сентября 2018

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

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

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

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

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

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

1 Ответ

0 голосов
/ 11 сентября 2018

Специальные символы в 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())
...