Вам нужно реализовать только один из них. Возможно, вы пытаетесь получить доступ к какому-либо офисному методу, прежде чем правильно инициализировать Office
. Как правило, мне нравится иметь загрузочный экран со спиннером и переходить с него только после инициализации офиса.
Office.initialize = function(reason) {
window.location.hash = 'apploaded';
}
Нет - вам нужно только инициализировать его один раз, если вы не обновляете сервер. Пока вы остаетесь в контексте своего приложения и не обновляете все приложение, а просто перемещаетесь между компонентами, все будет в порядке.
Это может произойти, особенно если под локальным подразумевается, что вы делаете это без контекста Office (то есть вы не в клиенте). Как я обычно решаю эту проблему, никогда не получаю прямой доступ к объекту Office, но всегда через службу, которая в случае пропуска объекта Office или его подпрограмм не вызывает сбоев. Так что вместо
// calling directly in some component
office.context.mailbox.item.to.getAsync
Я бы сделал
OfficeService.GetAsync() {
if (Office && Office.context && Office.context.mailbox && ...) {
// call real method
}
else {
console.log('Detected local mode - without office context')
// do a fake test operation instead of the real thing.
}
}
Просмотрите файл functionFile . Это дает вам кнопку на ленте, которую вы можете щелкнуть и выполнить функцию в основном. Он по-прежнему будет загружать HTML-код в невидимый браузер, но в этом случае вы не получите панель задач. Это должно поддерживаться только в подмножестве клиентов, но не во всех.
Есть несколько способов сделать это, вы можете просто указать URL-адрес вашей записи на панели задач в манифесте на этот URL-адрес компонента. Как это
<SourceLocation DefaultValue="https://randommailaddin.org/component"/>
и сопоставьте маршрутизацию /component
с вашим компонентом, поэтому, когда пользователь нажимает кнопку, он загружает только этот компонент. Вам все равно нужно инициализировать офисный контекст, иначе ваша функция не будет работать.