桌面版Office365 Excel Office Add-in中Dialog无法读取localStorage数据
问题解答
核心原因
桌面版Office 365中通过Office Dialog API打开的同源对话框,确实不会和父加载项窗口共享localStorage、sessionStorage以及非第三方Cookies,这是Office平台的有意设计,不属于代码或配置BUG。具体底层逻辑如下:
- 目前桌面版Office调用Webview2(Edge 94对应内核)渲染加载项时,会为加载项的主窗口/无UI功能文件、以及每一个通过Dialog API打开的对话框,创建独立的Webview2执行上下文,不同上下文的存储沙箱完全隔离,哪怕完全同源也无法互相访问存储内容。
- 该隔离设计的核心目的是避免不同加载项窗口的状态互相干扰,同时满足Office的安全合规要求。
可行替代方案
1. 参数直传
如果是父窗口要给对话框传递固定的一次性数据,可以在调用Office.context.ui.displayDialogAsync时,把需要的数据编码后拼在对话框URL的查询参数里,对话框加载时直接从location.search中解析读取即可。
2. 官方消息传递机制
需要双向数据同步时,优先使用Office内置的跨上下文消息能力:
- 父窗口给对话框发消息:调用对话框实例的
messageChild方法 - 对话框给父窗口发消息:调用全局的
messageParent方法
两边通过监听DialogMessageReceived事件接收消息,需要同步的存储数据可以通过消息通道传递,自行封装简易的同步逻辑即可实现跨上下文的状态共享。
3. Office专属存储API
如果是需要全局持久化存储的公共数据,可以直接使用Office加载项专属的OfficeRuntime.storage API,该API的存储是整个加载项全局共享的,不受Dialog上下文隔离影响,读写都不需要额外同步。
内容的提问来源于stack exchange,提问作者Beatrix
相关产品推荐
相关产品推荐

