未捕获的 TypeError: window.external.GetContext 不是一个函数。

14

我创建了一个Angular应用程序,并希望将JS API库用于其中。我想在Office 365 Outlook中使用此应用程序,但是我遇到了以下错误:

Uncaught TypeError: window.external.GetContext is not a function
OSF.InitializationHelper.getAppContext  @   o15apptofilemappingtable.js:11

我正在浏览器中运行index.html文件,最终我将在Office 365 Outlook中运行它。以下是代码:

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
尽管我遇到了相同的问题,但我的建议是不要使用这种方法,我的意思是检查window.external.GetContext并不好。我现在没有任何解决方案,但希望这个问题能得到一些有效的建议回答。 - Hitendra
在浏览器中运行Yeoman生成的应用程序时,我遇到了相同的问题。奇怪的是:当您打开托管的o15apptofilemappingtable.js文件时,它会显示:“Excel特定API库”。在Outlook中?奇怪。 - Jasper
2
你是如何解决这个问题的? - herrh
4个回答

7

我认为问题在于你是在浏览器窗口中打开它,而不是在Office应用程序内部打开。我在Excel插件中遇到了同样的问题。API在Office应用程序之外不应该正常工作。如果你需要让你的应用程序在Excel之外工作 - 你可以检查Web页面是否在Office应用程序内打开,并且只有在这种情况下加载Office API。


2

当我在浏览器中运行代码时,遇到了相同的问题。通过在MS Outlook邮件客户端中使用正确的清单XML文件运行代码,问题得以解决。


1

您的应用程序应该在Office 365内部。否则,它将无法识别Office.initialize事件。以下是初始化的开始方式

Office.initialize = function (reason) {
        $(document).ready(function () {        
                app.initialize();
                // app begin here

        });
};

看起来你的应用是Angular应用。因此,当Office.initialize触发时,应用需要手动引导。


-1

我遇到了同样的问题,花了一两个小时。最终通过从目录中删除本地文件并从源代码控制中获取最新版本来解决了这个问题。这样做恢复了office.d.ts文件,对我很有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接