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

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

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

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

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

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

0
Andi Giga 11 Сен 2018 в 12:15

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())
1
Quentin 11 Сен 2018 в 09:29