API Office JavaScript: выбор диапазона в Word для Mac - PullRequest
0 голосов
/ 01 июля 2019

Я работаю над сайтом, использующим API-интерфейсы Microsoft Office JavaScript. У меня есть некоторые функции, работающие, чтобы выбрать диапазон для прокрутки до определенной позиции в документе. Это работает должным образом в Office для Интернета, но в Office для Mac я получаю следующую ошибку при вызове context.sync().then():

Необработанный отказ от обещания: RichApi. Ошибка: ItemNotFound

Я не могу найти какую-либо документацию по этой конкретной ошибке, и я не уверен, как решить, что я могу делать неправильно. Что мне не хватает? Как я уже сказал, это работает в веб-интерфейсе.

Вот минимальный пример кода, который демонстрирует проблему:

function UI(context) {
    this.context = context;
}

UI.prototype.initialize = function() {
    var paragraphs = this.context.document.body.paragraphs;
    this.context.load(paragraphs);

    document.querySelector('button').addEventListener('click', () => {
        this.context.sync().then(() => {
            this.goToRange(paragraphs.items[0]);
        });
    });
};

UI.prototype.goToRange = function(range) {
    range.select();
    this.context.sync();
};

document.addEventListener('DOMContentLoaded', () => {
    Office.onReady(() => {
        Word.run(context => {
            return context.sync().then(() => {
                new UI(context).initialize();
            });
        });
    });
});

Единственное, о чем я могу думать, это то, что, возможно, ссылка на клиентский объект абзаца в некотором смысле становится «устаревшей», возможно, из-за некоторых ограничений ресурсов, которые ниже в приложении Mac, чем в онлайн-интерфейсе? (Это было бы нелогично для меня, но это единственное, что приходит на ум.)

1 Ответ

0 голосов
/ 02 июля 2019

Кажется, я понял проблему.Я наткнулся на подсказку, собирая минимальный пример кода в вопросе;Сначала я удалил слишком много кода и обнаружил следующую ошибку:

Необработанное отклонение обещания: RichApi.Error: Функция пакетной обработки, переданная методу ".run", не возвращала обещание.Функция должна возвращать обещание, чтобы любые автоматически отслеживаемые объекты могли быть освобождены при завершении пакетной операции.

Я считаю, что проблема заключается в том, что, по крайней мере в Word для Mac, вы можетене использовать context объект, предоставленный Word.run в асинхронном прослушивателе событий.Я предполагаю, что это потому, что, как указано выше, некоторые ошибки были освобождены после разрешения возвращенного обещания.Я могу заставить код работать, добавив выделенный вызов к Word.run (и используя предоставленный свежий context) внутри прослушивателя событий.

Все еще немного странно, что он прекрасно работает вбраузер.Предположительно, в браузерной версии то же состояние не высвобождается так агрессивно.

...