feat: support install guide app deeplinks

This commit is contained in:
3252a8
2026-05-23 09:52:26 +03:00
parent ce0d4dccf7
commit 19ba5c8f11
2 changed files with 42 additions and 5 deletions
+40
View File
@@ -1055,6 +1055,44 @@
window.location.assign(url); window.location.assign(url);
} }
function hasControlChars(value) {
return Array.from(String(value || "")).some((char) => {
const code = char.charCodeAt(0);
return code <= 31 || code === 127;
});
}
function openAppLink(url) {
const raw = String(url || "").trim();
if (!raw || hasControlChars(raw) || /^(javascript|data|vbscript):/i.test(raw)) {
return;
}
if (/^https?:\/\//i.test(raw)) {
openExternalLink(raw);
return;
}
if (/^tg:\/\//i.test(raw) && tg?.openTelegramLink) {
try {
tg.openTelegramLink(raw);
return;
} catch {
// Fall back to the generic deeplink path below.
}
}
try {
const anchor = document.createElement("a");
anchor.href = raw;
anchor.target = "_self";
anchor.rel = "noreferrer";
anchor.style.display = "none";
document.body.appendChild(anchor);
anchor.click();
anchor.remove();
} catch {
window.location.assign(raw);
}
}
function openConnectLink() { function openConnectLink() {
const url = subscription?.connect_url || subscription?.config_link; const url = subscription?.connect_url || subscription?.config_link;
if (!url) { if (!url) {
@@ -1374,6 +1412,7 @@
{goHome} {goHome}
openConnectLink={openPublicConnectLink} openConnectLink={openPublicConnectLink}
{openExternalLink} {openExternalLink}
{openAppLink}
{copyText} {copyText}
{t} {t}
publicMode publicMode
@@ -1484,6 +1523,7 @@
{goHome} {goHome}
{openConnectLink} {openConnectLink}
{openExternalLink} {openExternalLink}
{openAppLink}
{copyText} {copyText}
{t} {t}
/> />
@@ -26,6 +26,7 @@
export let goHome = () => {}; export let goHome = () => {};
export let openConnectLink = () => {}; export let openConnectLink = () => {};
export let openExternalLink = () => {}; export let openExternalLink = () => {};
export let openAppLink = null;
export let copyText = async () => {}; export let copyText = async () => {};
export let t = (key, _params = {}, fallback = "") => fallback || key; export let t = (key, _params = {}, fallback = "") => fallback || key;
export let publicMode = false; export let publicMode = false;
@@ -197,11 +198,7 @@
openConnectLink(); openConnectLink();
return; return;
} }
if (/^https?:\/\//i.test(url)) { (openAppLink || openExternalLink)(url);
openExternalLink(url);
return;
}
window.location.assign(url);
} }
async function handleButton(button) { async function handleButton(button) {