diff --git a/index.html b/index.html index 0b98c61..6eacba0 100644 --- a/index.html +++ b/index.html @@ -331,7 +331,7 @@ }); } - static #formatSearchUrl(commandUrl, searchTemplate, query) { + static #formatSearchUrl(searchTemplate, query, commandUrl) { if (!searchTemplate) return commandUrl; const [commandBase] = Search.#splitUrl(commandUrl); const [searchBase, path] = Search.#splitUrl(searchTemplate); @@ -366,7 +366,7 @@ if (COMMANDS.has(searchKey)) { const { searchTemplate, url: base } = COMMANDS.get(searchKey); const search = rawSearch.trim(); - const url = Search.#formatSearchUrl(base, searchTemplate, search); + const url = Search.#formatSearchUrl(searchTemplate, search, base); return { key: searchKey, query, search, splitBy, url }; } @@ -380,17 +380,19 @@ return { key: pathKey, path, query, splitBy, url }; } - const [baseUrl, rest] = Search.#splitUrl(CONFIG.defaultSearchTemplate); - const url = Search.#formatSearchUrl(baseUrl, rest, query); + const url = Search.#formatSearchUrl(CONFIG.defaultSearchTemplate, query); return { query, search: query, url }; }; static #splitUrl(url) { - const a = document.createElement('a'); - a.href = url; - const baseUrl = a.hostname ? `${a.protocol}//${a.hostname}` : null; - const rest = `${a.pathname}${a.search}`; - return [baseUrl, decodeURIComponent(rest)]; + try { + const u = new URL(url); + const base = `${u.protocol}//${u.hostname}`; + const rest = decodeURIComponent(`${u.pathname}${u.search}${u.hash}`); + return [base, rest]; + } catch (e) { + return [null, url]; + } } #close() {