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())