Uncaught TypeError: window.external.GetContext не является функцией
Я создал приложение angular и хотел использовать библиотеку JS API. Я хочу использовать это приложение в Office 365 Outlook. Однако я получаю следующую ошибку:
Uncaught TypeError: window.external.GetContext is not a function
OSF.InitializationHelper.getAppContext @ o15apptofilemappingtable.js:11
Я запускаю index.html в браузере, и в итоге я буду запускать его из внешнего Outlook 365. Ниже приведен код:
index.html
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Office 365 APIs sample</title>
<base href="/">
...
...
<!-- JavaScript Office API -->
<script src="https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js" type="text/javascript"></script>
<!-- App code. -->
<script src="scripts/app.js"></script>
<script src="controllers/homeController.js"></script>
</head>
<body>
</body>
</html>
app.js:
(function () {
console.log("STARTING...");
var init = function (reason) {
$(document).ready(function () {
console.log("ready");
});
};
try {
Office.initialize = init;
if(!window.external.GetContext) {
console.log('Not in office context');
init();
}
} catch(e) {
// when in office context unable to access external
console.log(e);
}
});
Пожалуйста, дайте мне знать, если кто-то столкнулся с этой ошибкой. Я не смог найти решения для этого, выполнив поиск в Интернете.
Спасибо!
Ответы
Ответ 1
Я думаю, проблема в том, что вы открываете ее в окне браузера, а не внутри приложения Office. Я столкнулся с той же проблемой с надстройкой Excel. Api не должен работать должным образом вне приложений Office. Если вам нужно, чтобы ваше приложение работало вне Excel, вы можете проверить, открыта ли веб-страница в приложении Office, и только в этом случае загружать офис api.
Ответ 2
Я столкнулся с такой же проблемой при запуске кода из браузера. Проблема была исправлена путем запуска кода в почтовом клиенте MS Outlook с надлежащим манифестным XML файлом.
Ответ 3
ваше приложение должно находиться внутри офиса 365. иначе он не распознает событие Office.initialize. вот как начало запуска
Office.initialize = function (reason) {
$(document).ready(function () {
app.initialize();
// app begin here
});
};
он выглядит как ваш angular приложение. поэтому приложению необходимо выполнить ручную загрузку, когда Office.initialize fire
Ответ 4
Я столкнулся с той же проблемой. потратьте час или два. Мне удалось решить, удалив локальные файлы из каталога и взяв последнюю версию из исходного элемента управления. Который восстановил файл office.d.ts, и это сделало трюк для меня.