从 outlook 加载项在默认浏览器中打开同源页面

Opening same origin page in default browser from outlook add-in

我有一个使用 office.js 的 Outlook 加载项。 加载项使用要求集 1.5。 如果插件在浏览器中打开,它会按预期运行。 (目标设置为“_blank”的 links 在新标签页中打开,无论来源如何) 单击与应用程序 SourceLocation 具有相同来源且目标设置为“_blank”的 link 时,页面将在 outlook 中的小型浏览器中打开,而不是在用户默认浏览器中打开。

我测试了以下版本:

同一域 link 在弹出窗口中打开 window:

Windows 10 Enterprise
    Version 1903
    Build 18362.418
Outlook
    Version 1908 
    Build 11929.20388 Click-to-Run

Windows 10 Enterprise
    Version 1903
    Build 18362.418
Outlook
    Version 1908 
    Build 11929.20300 Click-to-Run

按预期工作(在默认浏览器中打开):

macOS 
    Mojave 
    version 10.14.6 
Outlook:
    Version 16.29 (19090802)

Windows 10 Enterprise
    Version 1803
    Build 17134.766
Outlook
    Version 1908 
    Build 11929.20300 Click-to-Run

Windows 10 Enterprise
    Version 1809
    Build 17763.557
Outlook
    Version 1803 
    Build 9126.2275 Click-to-Run

我认为这个问题始于最近对 windows 或 outlook 的更新:大约在同一时间,加载项开始使用 Edge 而不是 IE。 请注意,在 mac 上进行测试时,如果打开的 url 与应用程序 SourceLocation 具有相同的来源,则使用 window.open(URL, '_blank'); 打开的页面将在弹出式浏览器中打开,而不是在用户默认浏览器中打开。 =13=]

您看到的行为是设计使然。新 windows 如果是同一个域,则使用 E​​dge 打开,以支持使用 cookie 将数据传递到 window。

如果任何链接在无法最大化或最小化的弹出窗口中打开 window,您希望用户如何获得无缝体验。用户通常期望使用他们的默认浏览器而不是默认浏览器。因此,我们使用 URL 参数来传递数据。

我猜你已经让它对开发人员友好,但对实际用户却不是。我建议您查看此最新更新。理想的解决方案是允许开发人员选择链接的打开方式,而不是由 Microsoft 决定最适合那里开发的每个加载项的方式。

我想我们需要在单独的域中托管加载项以适应这种情况并让用户获得无缝体验。太不方便了。

有一个新的 Officejs API 可用于处理此问题。 有关支持的客户端,请参阅 Open Browser Window API requirement sets。 请参阅 Office.UI interface 了解用法。

如果您支持 Outlook Web 或非 365 客户端,请使用 Office.context.requirements.isSetSupported('OpenBrowserWindowApi','1.1') 检查是否可以使用 openBrowserWindow,否则使用 window.open.