feat: support install guide app deeplinks
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user