ms-office – 为什么Outlook的RoamingSettings对象在页面重新加载/重定向后用旧值初始化?

前提:

>简单的Outlook加载项,包含一个(重新加载大小写)或两个HTML页面(重定向大小写).
>在任何对象访问之前调用Office.initialize
>根据文档使用RoamingSettings对象:How to save settings in the user’s mailbox for Outlook add-ins as roaming settings

编码:

// The Office initialize function must be run each time a new page is loaded
Office.initialize = function (reason) {
    $(document).ready(function () {
        app.initialize();

         var settings = Office.context.roamingSettings;

        // Get the current value of the 'myKey' setting
        // let's assume it was set and stored with value "Hello World!" previously
        var value = settings.get('myKey');

        // Update the value of the 'myKey' setting
        settings.set('myKey', 'Reload World!');

        // Persist the change
        settings.saveAsync();

        var $btn_reload = $('#btnReload');
        $btn_reload.off('click').on('click', reloadThePage);
    });
};
function reloadThePage() {
    // re-load current page
    window.location.href = self.location.href;
};

工作流程:

通过我们对值变量感兴趣的代码.首次加载我们假设“value”设置为“Hello World!”.加载页面后,该值将设置为“重新加载世界!”并将保留到服务器邮箱.点击HTML按钮后会触发简单的页面重新加载.代码将再次开始执行整个序列. Office.initialize之后的每个文档我们的“漫游设置”对象已准备好使用,我们再次检查“值”.我期待这个值是“重装世界!”,但我有旧的价值“Hello World!”.

当代码导航到另一个页面时,会发生相同的情况.这个页面将是类似的,在Office.initialize“漫游设置”之后仍将保留旧值“Helllo World!”而不是保存新的价值“重新加载世界!”.

请注意,我们使用“saveAsync”存储到服务器的值确实已更改.这很容易验证.运行相同的方案,然后关闭加载项(加载项iframe)并再次重新打开它.页面初始加载的“值”将是正确的“重新加载世界!”.

结论(我对这个问题的猜测):

在调试问题时,我注意到Office.context.roamingSettings包含两个不同的私有对象:一个名为“settings …”,第二个名称为“rawSettings …”.在初始加载时,“rawSetting …”将保留所有设置,“Settings …”将不会出现.首次访问特定设置键后,“设置…”对象创建,“RawSettings …”将设置为null.使用设置时,您实际使用“设置…”.重新加载/重定向“RawSettings …”再次出现后,它将保留未更新的旧数据.同时,如果您完全关闭加载项并再次打开它,“rawSettings …”将保存新的更新数据.

这让我觉得加载项的iFrame在某处保存了相同的数据,用于在加载时重新初始化“内存中”对象.在加载项启动期间,此数据将从邮箱中提取,但是当您重新加载页面或重定向到iFrame的应用程序数据的另一个页面时,将使用它并且它不是最新的.

有人会澄清这是否是它的设计方式?我是否错误地使用了该物体?

请注意,对于使用单页面应用程序且不需要重新加载任何页面的加载项,这不是问题.这种情况是由于某种原因,加载项需要重新加载整个页面(例如从头开始重新初始化所有内容)或使用多个页面应用程序.

最佳答案 这是一个已知问题,存在于待办事项中.我们目前没有ETA可供分享.

点赞