从 Blazor 服务器在新选项卡中打开链接

问题描述 投票:0回答:1

我正在尝试从 Blazor 服务器应用程序在新选项卡中打开链接。我尝试了几种方法,例如

await JSRuntime.InvokeVoidAsync("open", action.ActionData, "_blank");

以及

await JSRuntime.InvokeVoidAsync("NavigateTo", action.ActionData);

而 NavigateTo 函数如下所示:

window.NavigateTo = (url) => {
    const link = document.createElement('a');
    link.href = url;
    link.target = '_blank';
    document.body.appendChild(link);
    link.click();
    link.remove();
}

除 IOS 上的 Safari 外,所有浏览器中一切正常。

有人找到解决这个问题的方法了吗?我发现,从异步任务在 Safari 中打开新选项卡时出现问题。但我找不到从 Blazor Server 同步启动此功能的方法。

javascript ios blazor-server-side mobile-safari
1个回答
0
投票

这是浏览器故意提供的功能,阻止您对代码做一些令人讨厌的事情。人们绝对不希望他们访问的网站随时开始生成新页面。您可能会生成一个页面,也可能会生成一打弹出广告。

几乎所有移动媒体的最低要求是它在合法的 UI 交互中进行初始化 - 例如,实际(而非模拟)单击客户端屏幕上的按钮。

我的大多数网站都有一个“进入网站”按钮,首页上没有其他内容。我用它来预加载音频、请求媒体录音机权限等。这是一种黑客行为,有点肮脏的伎俩,但它允许我将音频与幻灯片等中的图像同步。

因此,我建议您在 javascript 中的点击处理程序中尽可能多地进行链接初始化,而不是在 Blazor 互操作调用中。

© www.soinside.com 2019 - 2024. All rights reserved.