Excel for Mac 16.1升级后任务窗格插件window.open打开空白窗口求助
针对Excel for Mac 16.1+的SSO认证替代方案
我之前在适配Excel Mac插件的时候也踩过window.open的坑,给你几个针对SSO和跨域认证场景的可行方案,亲测有效:
优先使用Office.js官方Dialog API
这是微软专门为Office插件设计的弹出窗口方案,完美适配Mac版本的安全限制,而且天然支持SSO流程中的跨域重定向。实现步骤如下:- 调用
Office.context.ui.displayDialogAsync打开你的登录页面,开启事件传播权限; - 登录完成(包括跳转到未在manifest中配置的认证域名)后,在回调页面通过
messageParent方法把认证凭证(如token)传递回插件主页面; - 记得在manifest的
<AppDomains>里添加登录完成后跳转回的业务域名,确保Dialog能正常完成通信。
示例代码:
// 主页面打开登录Dialog Office.context.ui.displayDialogAsync('/login.op', { height: 50, width: 50, allowEventPropagation: true }, function(result) { const dialog = result.value; // 监听Dialog返回的消息 dialog.addEventHandler(Office.EventType.DialogMessageReceived, function(args) { const authToken = args.message; dialog.close(); // 这里处理拿到token后的业务逻辑 }); }); // 登录成功后的回调页面发送消息 Office.context.ui.messageParent(JSON.stringify({ token: 'your_auth_token' }));这个方案的优势是完全符合Office插件的安全模型,不管Mac还是Windows版本都能稳定运行,中间的认证跳转域名不需要提前配置到manifest里。
- 调用
尝试将认证域名加入manifest的AppDomains
如果你的SSO服务的认证域名是固定的(比如Azure AD的login.microsoftonline.com),可以把这些域名添加到manifest的<AppDomains>节点中,这样window.open可能就能正常加载认证页面了。不过这个方法只适用于你能提前知晓所有跳转域名的场景,动态域名就不适用了。示例manifest配置片段:
<AppDomains> <AppDomain>https://login.your-sso-provider.com</AppDomain> <AppDomain>https://your-main-app-domain.com</AppDomain> </AppDomains>隐式授权流配合iframe(备选方案)
如果你不想用Dialog API,可以尝试把认证流程放在隐藏的iframe中,通过postMessage和主页面通信。但要注意,有些SSO服务会设置X-Frame-Options阻止页面嵌入,所以需要先确认你的认证服务商允许这种方式。核心思路代码:
// 创建隐藏的认证iframe const authIframe = document.createElement('iframe'); authIframe.style.display = 'none'; // 这里替换成你的SSO隐式授权地址 authIframe.src = '/login.op?response_type=token&client_id=your_client_id&redirect_uri=your_callback_uri'; document.body.appendChild(authIframe); // 监听iframe返回的认证消息 window.addEventListener('message', function(event) { // 验证消息来源的合法性 if (event.origin === 'your_callback_uri_domain') { const authData = JSON.parse(event.data); const token = authData.token; // 处理凭证后移除iframe document.body.removeChild(authIframe); } });
总体来说,最稳妥的还是第一个方案——Office.js Dialog API,毕竟是官方针对Office插件认证场景设计的,兼容性和稳定性都有保障。
内容的提问来源于stack exchange,提问作者agradl
相关产品推荐
相关产品推荐

