Outlook插件中是否存在跨平台通用的外部链接打开方法?
问题原因
MacOS 桌面端 Outlook 内置了沙箱机制,对插件同源域名下的所有页面跳转默认会复用内置 webviewer 加载,仅跨域的外部域名请求才会触发调用系统默认浏览器,该行为是 Outlook 官方的安全策略,没有可手动修改的用户配置项。
你之前遇到的IE内核Outlook截断hash的问题,是因为Office对window.open方法做了沙箱封装,旧版IE内核的封装逻辑没有正确处理URL的fragment(#之后的部分),才会出现截断问题。
全平台通用解决方案
不需要平台判断、不需要额外托管redirect页面,仅通过动态创建a标签触发原生点击即可覆盖所有你提到的目标平台,实现代码如下:
// 可封装为Angular服务的公共方法 openExternalUrl(targetUrl: string): void { const linkEle = document.createElement('a'); linkEle.href = targetUrl; linkEle.target = '_blank'; linkEle.rel = 'noopener noreferrer'; // 隐藏元素不影响页面布局 linkEle.style.position = 'absolute'; linkEle.style.width = '0'; linkEle.style.height = '0'; linkEle.style.opacity = '0'; document.body.appendChild(linkEle); // 触发原生跳转行为 linkEle.click(); // 清理DOM document.body.removeChild(linkEle); }
使用时直接传入原始URL即可,不需要额外编码,不会出现拼接插件主机地址的问题。该方案的优势如下:
- 完美解决IE内核Outlook的hash截断问题:原生a标签的跳转行为不会被Office的沙箱逻辑修改,URL完整度不受影响
- 自动适配MacOS Outlook的跳转规则:直接触发外部域名跳转时会自动调用系统默认浏览器,不会打开内置webviewer
- 支持任意交互触发场景:可以绑定到单击、双击、右键菜单等任意事件的回调中,不需要在模板中预设静态a标签
- 兼容所有你提到的目标平台:Windows Outlook 2016/2019/O365、全版本MacOS桌面端Outlook、所有主流浏览器的Outlook网页版均可以正常运行
内容的提问来源于stack exchange,提问作者bartpat
相关产品推荐
相关产品推荐

