【问题标题】:Do add-in and its popup browser window share a same localStorage?加载项及其弹出式浏览器窗口是否共享同一个 localStorage?
【发布时间】:2017-04-02 13:16:31
【问题描述】:

我正在使用 JavaScript API 构建 Excel 插件。

插件可以通过

弹出浏览器窗口
popup = window.open("https://localhost:3000/#/new", "popup", "status=1, location=1, width=1000, height=1200");

我已经测试了插件和弹出的浏览器窗口可以通过postMessage进行通信。

但是,它们似乎不共享相同的localStorage。例如,如果我在网页中设置localStorage.setItem("item", "content"),则加载项中的localStorage.getItem("item") 返回null

有谁知道插件和弹出浏览器窗口是否共享同一个localStorage?

PS:我已经测试过一个插件本身可以在localStorage中设置一个项目并获取值。此外,网页可以在localStorage 中设置和获取项目,即使它们可能在同一个浏览器窗口中。

【问题讨论】:

    标签: popup local-storage ms-office office-js


    【解决方案1】:

    他们没有(在 Office for Windows 上)。它们以不同的信任模式运行,cookie、localStorage 等是否共享。

    如果您需要类似弹出窗口的场景,这就是 DialogAPI 的用途。

    【讨论】:

    • postMessage 可以在 Dialog 和加载项之间工作吗?
    • 不,我不这么认为,出于同样的原因。如果您想要双向通信,您将需要 DialogAPI(可能还需要写入本地存储并在另一端侦听,以便在两者之间进行通信——今天的 DialogAPI 仅支持对话到父级,但不支持其他方式, 然而)
    • 对不起,DialogAPI也是一个网页,对吧?如果外接程序可以通过postMessage 与弹出窗口通信(即使对于跨域),为什么外接程序无法通过postMessage 与其对话框通信,除非您设置一些限制...
    • 通讯不会直接通过postmessage。它将通过代理通信的 API。
    【解决方案2】:

    如果您在 asp.net 中工作,我认为您可以使用 SignalR 之类的东西在两者之间进行通信。如果您在 node 等不同的环境中工作,则应该使用标准的 websocket 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 2013-01-27
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      相关资源
      最近更新 更多