我正在尝试从 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 同步启动此功能的方法。
这是浏览器故意提供的功能,阻止您对代码做一些令人讨厌的事情。人们绝对不希望他们访问的网站随时开始生成新页面。您可能会生成一个页面,也可能会生成一打弹出广告。
几乎所有移动媒体的最低要求是它在合法的 UI 交互中进行初始化 - 例如,实际(而非模拟)单击客户端屏幕上的按钮。
我的大多数网站都有一个“进入网站”按钮,首页上没有其他内容。我用它来预加载音频、请求媒体录音机权限等。这是一种黑客行为,有点肮脏的伎俩,但它允许我将音频与幻灯片等中的图像同步。
因此,我建议您在 javascript 中的点击处理程序中尽可能多地进行链接初始化,而不是在 Blazor 互操作调用中。