已在Edge内时调用microsoft-edge:url无法跳转链接的解决方案咨询
Edge环境下
microsoft-edge:协议跳转失效的解决方案 首先明确该现象的成因:新版Microsoft Edge对microsoft-edge:系统协议做了进程内拦截,当协议调用方本身就是Edge进程时,不会执行「拉起Edge加载目标URL」的逻辑,会直接触发内置兜底规则跳转至Bing搜索页,这是浏览器内置的限制,和协议串的拼接、编码方式无关。
可行的实现方案如下:
- 前置浏览器环境判断,分支处理跳转逻辑
先通过UA识别当前运行环境是否为Edge:新版Edge的UA中包含固定标识Edg/,可通过正则匹配快速判断。如果当前环境不是Edge,再走microsoft-edge:协议拉起Edge打开目标链接;如果已经处于Edge环境,直接使用常规跳转逻辑即可——本身已经在Edge运行环境中,不需要再调用系统协议,常规跳转天然满足「在Edge中打开目标URL」的要求,不会触发Bing兜底。
参考实现代码:// 识别新版Edge环境 const isInEdgeBrowser = /Edg\/\d+\.\d+/i.test(navigator.userAgent); const targetLink = "这里替换为你要跳转的目标URL"; if (isInEdgeBrowser) { // 已在Edge内,直接同上下文跳转 window.location.href = targetLink; // 如果需要新开标签页,替换为 window.open(targetLink, '_blank') 即可 } else { // 非Edge环境,走系统协议拉起Edge window.location.href = `microsoft-edge:${targetLink}`; } - 无效方案避坑
不要尝试通过修改协议串格式、增加特殊参数、调整URL编码方式绕开Edge的进程内拦截,该拦截是在浏览器进程层面实现的,只要调用源是Edge自身,任何格式的microsoft-edge:协议调用都会被拦截跳转至Bing,前端层面没有绕开该拦截的方法,无需在这部分浪费调试时间。
补充提示:
microsoft-edge:是系统注册的协议,仅在设备安装了Microsoft Edge时才能正常生效,如果你的用户群体存在未安装Edge的情况,需要额外增加协议调用失败的兜底逻辑,避免出现无响应的问题。
内容的提问来源于stack exchange,提问作者Bando
相关产品推荐
相关产品推荐

