Office加载项承诺只有在鼠标悬停加载项任务窗格时才会解析

时间:2017-02-06 15:31:57

标签: office-js

我正在开发一个加载项,当用户在活动工作表中更改其选择时,该加载项将查询Excel对象模型。

在测试期间,我有时遇到一个问题,即在我将鼠标指针移到加载项任务窗格上之前,承诺无法解析。更具体地说,Excel.run批处理中声明的第一个命令最初甚至没有在客户端评估(当鼠标仍在Excel文档上时),但只要鼠标悬停在任务窗格上就会对其进行评估。

我正在使用Excel 2016测试Windows 10周年纪念日更新并使用Edge(14),但似乎Excel加载项正在利用IE11引擎。在这种情况下,es6-promise库使用DOM MutationObserver API提供promises实现。

他们的图书馆看起来不错。有人在过去填写了一个问题(https://github.com/stefanpenner/es6-promise/issues/109),它与IE11和MutationObservers有关,但看起来它在IE方面得到了解决。 MutationObservers仍然存在问题,但我确定了根本原因的麻烦。

如果您想自己测试一下,可以使用以下代码:

(function () {
    "use strict";

    // The initialize function must be run each time a new page is loaded.
    Office.initialize = function (reason) {
        $(document).ready(function () {
            Office.context.document.addHandlerAsync(Office.EventType.DocumentSelectionChanged, function () {

                var values = [
                    [Math.floor(Math.random() * 1000), Math.floor(Math.random() * 1000), Math.floor(Math.random() * 1000)],
                    [Math.floor(Math.random() * 1000), Math.floor(Math.random() * 1000), Math.floor(Math.random() * 1000)],
                    [Math.floor(Math.random() * 1000), Math.floor(Math.random() * 1000), Math.floor(Math.random() * 1000)]
                ];

                Excel.run(function (ctx) {
                    var sheet = ctx.workbook.worksheets.getActiveWorksheet();
                    sheet.getRange("B3:D5").values = values;
                    return ctx.sync();
                })
                .catch(errorHandler);
            });

        });
    }

    // Helper function for treating errors
    function errorHandler(error) {
        showNotification("Error", error);
        console.log("Error: " + error);
        if (error instanceof OfficeExtension.Error) {
            console.log("Debug info: " + JSON.stringify(error.debugInfo));
        }
    }
})();

我经常在Internet Explorer中打开很多选项卡,其中一些可能附加了调试器或开发了开发工具,但我真的不确定是什么触发了这种行为。

根据我的“问题”本身,如果问题得到确认,您是否知道是否有办法使用Edge而不是IE11来执行Office加载项,或者知道es6-promise的其他实现是否可能是除了使用MutationObserver API之外的其他用途吗?

由于

0 个答案:

没有答案