У меня есть несколько строк, которые могут быть в этом формате:
const s1 = "https://test1.com/testPage";
const s2 = "https://test2.com/testPage?specificParam=1"
const s3 = "https://test3.com/someOtherPage?specificParam=2&restParam=3";
Поэтому, когда я читаю это в функции, мне нужно проверить, включены ли в строку параметры запроса, если да, то мне нужно закодировать ее, используя ее window.btoa()
для всех параметров запроса. Если не напрямую перенаправить. Может ли кто-нибудь помочь, как это сделать?
function test(path){
const href = window.location.origin + path;
if (href.includes('?')){
// split all the query params and then attach `btoa` to it and then openthe url
with encoded params
}
window.open(href, '_blank', 'no-referer');
}
Вы можете использовать конструктор URL
.
const url = new URL("https://test3.com/someOtherPage?specificParam=2&restParam=3");
if (url.search) {
// use url.search or url.searchParams
// base64 encode each query param value
url.search = new URLSearchParams([...url.searchParams].map(([k, v]) => [k, btoa(v)]));
}
@ lrr59 lrr59 Должны ли мы предположить, что исходная строка не закодирована как правильный URL-адрес?
да, он не закодирован. Пользовательский интерфейс должен его закодировать, ведь параметры запроса не закодированы.
@ lrr59 Вы можете использовать url.search = new URLSearchParams(url.search.slice(1).split('&').map(p => { const [k, v] = p.split('='); return [k, btoa(v)]; }));
, но это не сработает, если в значениях параметров есть специальные символы, которые не имеют правильного формата.
возникла проблема при копировании вашего фрагмента. Не могли бы вы добавить его к той же функции в самом ответе.
Я получаю это: тип «URLSearchParams» не может быть присвоен типу «string».ts(2322) при использовании с машинописным текстом. Я использовал это так: `````` const redirectUrl: URL = new URL("test2.com/testPage?specificParam=1"); if (redirectUrl.search) { redirectUrl.search = new URLSearchParams([...redirectUrl.searchParams].map(([k, v]) => [k, window.btoa(v)])); } window.open(redirectPath, '_blank', 'no-referer'); ``````
@lrr59 В этом случае вы можете добавить .toString()
в конец, т. е. url.search = new URLSearchParams([...url.searchParams].map(([k, v]) => [k, btoa(v)])).toString();
Как я могу применить window. btoa по всем параметрам?