Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Uncaught TypeError: window.external.GetContext is not a function

I have created an angular app and wanted to use JS API library into it. I want to use this app inside Office 365 Outlook. However, I am getting the following error:

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

I am running the index.html on a browser and eventually I will run it from inside office 365 outlook. Below is the code:

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);
      }
    });

Please let me know if anyone has encountered this error. I could not find any solution to it by searching on the web.

Thanks!

like image 361
Spartan Avatar asked Aug 21 '15 21:08

Spartan


3 Answers

I think the problem is that you are opening it in browser window, not inside Office app. I encountered the same problem with Excel add-in. The api should not work properly outside of Office applications. If you need your application to work outside of Excel - you can check if the web-page is opened inside Office application, and only in that case load office api.

like image 152
Mary Avatar answered Nov 16 '22 13:11

Mary


I have faced the same issue when running the code from browser. The issue got fixed by running the code in MS Outlook mail client with proper manifest XML file.

like image 44
M Thomas Avatar answered Nov 16 '22 14:11

M Thomas


your app should be inside the office 365 .otherwise it doesn't recognize Office.initialize event. here is how initiation start

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

        });
};

it looks like your one is angular app. therefore app need to manual bootstrap when Office.initialize fire

like image 1
InfoÁsith Avatar answered Nov 16 '22 13:11

InfoÁsith